set 2: dom it452 advanced web and internet systems

14
Set 2: DOM T452 Advanced Web and Internet Systems

Upload: florence-wheeler

Post on 17-Jan-2016

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Set 2: DOM IT452 Advanced Web and Internet Systems

Set 2: DOM

IT452 Advanced Web and Internet Systems

Page 2: Set 2: DOM IT452 Advanced Web and Internet Systems

Review – DHTML Basics

• Find the HTML object we want to changevar domLink = document.getElementById("linkToAnimal");

• Change the object’s:– HTML properties

domLink.href = "cat.html";

– CSS properties

domLink.style.backgroundColor = "blue";

Page 3: Set 2: DOM IT452 Advanced Web and Internet Systems

Simple Paint (ex1.html) – Part 1

<html xmlns = "http://www.w3.org/1999/xhtml">

<head> <title>IT 452 DOM demo</title>

<script type="text/javascript" > <!--

var currentAction = "red"; function doupdate(curNode ) { curNode.style.backgroundColor = currentAction; }

// --> </script></head>

Page 4: Set 2: DOM IT452 Advanced Web and Internet Systems

Simple Paint (ex1.html) – Part 2

<body>

<h1> IT 452 DOM demo </h1> <p>Tools:</p> <ul> <li onclick="currentAction='red' "> Set red </li> <li onclick="currentAction='blue' "> Set blue </li> </ul> <table border="1"> <tr> <td onclick="doupdate(this)"> thing 1 </td> <td onclick="doupdate(this)"> thing 2 </td> </tr> <tr> <td onclick="doupdate(this)"> thing 3 </td> <td onclick="doupdate(this)"> thing 4 </td> </tr> </table></body></html>

Page 5: Set 2: DOM IT452 Advanced Web and Internet Systems

What does the DOM tree look like?

Page 6: Set 2: DOM IT452 Advanced Web and Internet Systems

ex2.html – add insert/delete/edit function doupdate(curNode ) { var parent = curNode.parentNode;

if (currentAction == "insert") { newThing = document.createElement("td"); parent.insertBefore(newThing, curNode); newThing.innerHTML = "hello"; }

else if (currentAction == "delete") { parent.removeChild(curNode);

}

else if (currentAction == "edit") { curNode.innerHTML = window.prompt("Enter new text", "");

}

else { curNode.style.backgroundColor = currentAction; }

}

Page 7: Set 2: DOM IT452 Advanced Web and Internet Systems

ex3.html – fully functional function doupdateDyn() { doupdate(this); } function doupdate(curNode ) { var parent = curNode.parentNode; if (currentAction == "insert") { newThing = document.createElement("td"); parent.insertBefore(newThing, curNode); newThing.innerHTML = "hello"; newThing.onclick = doupdateDyn; }

else if (currentAction == "delete") { parent.removeChild(curNode);

} else if (currentAction == "edit") {

curNode.innerHTML = window.prompt("Enter new text", curNode.innerHTML); }

else { curNode.style.backgroundColor = currentAction; } }

Page 8: Set 2: DOM IT452 Advanced Web and Internet Systems

Event Variables Require Event Types

1. Javascript is weakly typed

2. A given variable can be assigned strings, ints, events, etc.

3. However, variables can be assumed to be a certain type, used later by other code.

• newThing.href assumes a string

• newThing.onclick assumes an event

• If you violate these assumptions, something will likely break later on your webpage.

Page 9: Set 2: DOM IT452 Advanced Web and Internet Systems

Creating an onclick event for a node.

Bad Ideas

•newThing.onclick = "doupdate(this)“;

•newThing.onclick = doupdateDyn();

Good Ideas

•newThing.onclick = doupdateDyn;

Page 10: Set 2: DOM IT452 Advanced Web and Internet Systems

Three Ways to do this

newThing.onclick = doupdateDyn;

newThing.addEventListener(‘click’, doupdateDyn);

newThing.onclick = function() { doupdate(this); }

Page 11: Set 2: DOM IT452 Advanced Web and Internet Systems

ex4.html – more elegant / alternatives

function doupdate(curNode ) { var parent = curNode.parentNode;

if (currentAction == "insert") { newThing = document.createElement("td"); parent.insertBefore(newThing, curNode); newThing.innerHTML = "hello"; newThing.onclick = function() {doupdate(this)}; }

else if (currentAction == "delete") { parent.removeChild(curNode);

}

else if (currentAction == "edit") { curNode.firstChild.nodeValue =

window.prompt("Enter new text", curNode.innerHTML); }

else { curNode.style.backgroundColor = currentAction; } }

Page 12: Set 2: DOM IT452 Advanced Web and Internet Systems

Summary

Grab HTML elements•document.getElementById(“yourid”)

•document.getElementsByTagName(“p”)

•node.childNodes

•node.parentNode

Create new HTML elements•node = document.createElement(“p”)

•node = document.createTextNode(“text that goes in a p later”)

Add new HTML elements to the page•node.appendChild(newnode)

•node.insertBefore(newnode, node)

Change HTML attributes/style•yourvar.href = “somelink.html”

•yourvar.style.styleName = “style-val”

Page 13: Set 2: DOM IT452 Advanced Web and Internet Systems

Tips

• Remember JavaScript console

• How many children?– Use DOM Inspector to see (Firefox and Chrome)

– From ex5.html: else if (currentAction == "parent") {

var kids = parent.childNodes;

window.alert("Number children: "+kids.length);

window.alert("Type of first: "+kids[0].nodeType);

}

• See DOM reference links under IT452 page– Use the API!

Page 14: Set 2: DOM IT452 Advanced Web and Internet Systems

Ex6.html: iterating over children

var kids = parent.childNodes;for (var i=0; i < kids.length; i++) { var theKid = kids[i]; window.alert("Kid #“ + i + " has type“ + theKid.nodeType); }