430 likes | 604 Views
Document Object Model. OBJECTIVES. In this chapter you will learn: How to use JavaScript and the W3C Document Object Model to create dynamic web pages. The concept of DOM nodes and DOM trees. How to traverse, edit and modify elements in an XHTML document. Introduction.
E N D
OBJECTIVES In this chapter you will learn: • How to use JavaScript and the W3C Document Object Model to create dynamic web pages. • The concept of DOM nodes and DOM trees. • How to traverse, edit and modify elements in an XHTML document.
Introduction • The Document Object Model gives you access to all the elements on a web page. Using JavaScript, you can create, modify and remove elements in the page dynamically. • With the DOM, XHTML elements can be treated as objects, and many attributes of XHTML elements can be treated as properties of those objects. Then, objects can be scripted (through their id attributes) with JavaScript to achieve dynamic effects.
DOM • The document object model is a representation of the whole document as nodes and attributes • You can access each of these nodes and attributes and change or remove them • You can also create new ones or add attributes to existing ones
DOM <HTML> <BODY> <table border="0" cellspacing="2" cellpadding="5"> <tr> <td colspan="2"><imgsrc="Greetings.jpg“/></td> </tr> <tr> <td> Welcome to my sample HTML page! <br /> <a href="somelink.html" id="myLink" >Click Here!</a> </td> <td><imgsrc="hello.jpg" id="helloImg" /></td> </tr> </table> </BODY> </HTML>
HTML DOM Element Node <html> <head> <title>DOM Tutorial</title> </head> <body> </body></html> firstChild Text Node (Access using innerHTML property LastChild
Document : Open() and close() <html> <head> <script type="text/javascript"> function createDoc() { vardoc=document.open("text/html","replace"); doc.write("<html><body><h1>SelamatDatangKeDunia DOM dan” + “JavaScript</body></h1></html>"); doc.close(); } </script> </head> <body> <input type="button" value="New document" onclick="createDoc()" /> </body> </html> Example
getElementById() <html> <head><script type="text/javascript"> function getValue() {var x=document.getElementById("myHeader"); alert(x.innerHTML); }</script> </head> <body><h1 id="myHeader" onclick="getValue()">PaparSayapadakotakelert!</h1> </body> </html> Example
InnerHTML <html> <body> <p id="intro">Intoduction to DOM</p> <script type="text/javascript"> txt=document.getElementById("intro").innerHTML; document.write("<h2>The text from the intro paragraph: <span style = \"color: magenta\"> " + txt + "</span></h2>"); </script> </body> </html> Example
getElementsByName() <html> <head> <script type="text/javascript"> function getElements() { var x=document.getElementsByName("list"); alert(x.length); } </script></head> <body> <ul> <li name="list"><a href=" ">FTSM</a></li> <li name="list"><a href=" ">FST</a></li> <li name="list"><a href=" ">FSKK</a></li> <li name="list"><a href=" ">FPI</a></li> <li name="list"><a href=" ">FPend</a></li></ul> <input type="button" onclick="getElements()" value="How many elements named 'list?" /> </body></html> Example
getElementsByTagName() <html><head> <script type="text/javascript"> function getElements() { var x=document.getElementsByTagName("li"); alert(x.length); } </script></head> <body> <ul> <li><a href=" ">FTSM</a></li> <li><a href=" ">FST</a></li> <li><a href=" ">FSKK</a></li> <li><a href=" ">FPI</a></li> <li><a href=" ">FPend</a></li> </ul> <input type="button" onclick="getElements()" value="How many list items?" /> </body></html> Example
Retrieving Child element • If an element contains other elements then these elements are its child • childNodesis a list of all the first-level child nodes of the element – it does not cascade down into deeper levels • A child element of the current element can be access via the array index or the item() method • yourElement.firstChild @ yourElement.lastChild yourElement.childNodes[0] @ yourElement.childNodes[yourElement.childNp.length-1) • To check whether an element has any children by calling the method hasChildNodes(), which returns a Boolean value.
childNodes() <html> <body> <p id="intro">Web Programming</p> <div id="main"> <ul id = "nav"> NAMA PROGRAM <li>SainsMaklumat</li> <li>Multimedia</li> <li>KomputeranIndustri</li> <li>SainsKomputer</li> <li>PengurusanSistem</li> </ul></div> <script type="text/javascript"> x=document.getElementById("nav").childNodes[1]; document.write("First paragraph text: " + x.innerHTML); </script> </body> </html> Example
parentNode • Returns the parent element of the current node in the DOM hierarchy.
parentNode <html> <body> <ul> NAMA PROGRAM <li>SainsMaklumat</li> <li>Multimedia</li> <li>KomputeranIndustri</li> <li>SainsKomputer</li> <li>PengurusanSistem</li> </ul> <script type="text/javascript"> txt=document.getElementsByTagName("li")[3].parentNode; document.write("<p> Memaparkan <i>Parent</i> bersertaanak: " + txt.innerHTML + "</p>"); </script> </body> </html> Example
firstChild, lastChild • The firstChild property retrieves the first item from the childNodes collection. • Similarly, the lastChild property returns the last item from the childNodes collection.
firstChild <html><head> <script type="text/javascript"> function GetFirstText () { varselectObj = document.getElementById ("mySelect"); alert (selectObj.firstChild.text); } </script> </head> <body> <button onclick="GetFirstText ();">Get the text of the first child!</button> <select id="mySelect" multiple="multiple“><option>FTSM</option> <option>FST</option> <option>FSSK</option> <option>FPI</option> <option>FPend</option> </select> </body></html> alert (selectObj.childNodes[0].text); alert (selectObj.childNodes[0].innerHTML); Example
lastChild <html><head> <script type="text/javascript"> function GetFirstText () { varselectObj = document.getElementById ("mySelect"); alert (selectObj.lastChild.text); } </script> </head> <body> <button onclick="GetLastText ();">Get the text of the last child!</button> <select id="mySelect" multiple="multiple"><option>FTSM</option> <option>FST</option> <option>FSSK</option> <option>FPI</option> <option>FPend</option></select> </body></html> alert (selectObj.childNodes[childNodes.length - 1].text); alert (selectObj.childNodes[childNodes.length - 1].innerHTML); Example
nextSibling • Returns a reference to the next child of the current element's parent. • In other words, the nextSibling property returns the element that immediately follows the current element in the childNodes collection of the current element's parent. • Returns a reference to the next sibling or null if it does not exist.
nextSibling <html><head> <script type="text/javascript“> function GetNextNode () { varparentElem = document.getElementById ("navigation"); secondElem = parentElem.childNodes[1]; alert ("The value of the first node: " + secondElem.innerHTML); prevElem = secondElem.nextSibling; alert ("The value of the next node: " + prevElem.innerHTML); prev1Elem = prevElem.nextSibling; alert ("The value of the next node: " + prev1Elem.innerHTML); } </script></head> <body><div id="header“><div align="center"><imgsrc="ukm.jpg" alt="Fakulti" width="208" height="144"></div></div> <h4>FakultiTeknologidanSainsMaklumat</h4> <div id="navigation“> <ul>PUSAT PENGAJIAN TEKNOLOGI MAKLUMAT <li>SainsMaklumat</li><li>Multimedia</li><li>KomputeranIndustri</li></ul> <ul>PUSAT PENGAJIAN SAINS KOMPUTER <li>SainsKomp.</li><li>Peng.Sistem</li><li>KecerdasanBuatan</li></ul></div> <button onclick="GetNextNode ()">Get Next Node!</button><br /> </body></html> Example
Node Properties • Once reached a wanted node, you can read out its properties • nodeType stores the type of the node (1 for element, 3 for text) • nodeName stores the name of the node (either the element name or #textNode) • nodeValue stores the value of the node (null for element nodes and the text for text nodes)
nextElementSibling • Returns a reference to the next child element of the current element's parent. • The next sibling node and the next sibling element can be different. A node is an element node if it's nodeType is 1 (Node.ELEMENT_NODE). Text nodes and comment nodes are not element nodes. If you need the next sibling node of an element, use the nextSibling property. • Similarly to the nextElementSibling property, the previousElementSibling property returns the previous sibling element of an element, furthermore the firstElementChild and lastElementChild properties return the first and last child element of an element.
Content <body> <ol id="navigation">FAKULTI TEKNOLOGI DAN TEKNOLOGI MAKLUMAT <li>SainsMaklumat</li> <li>Multimedia</li> <li>KomputeranIndustri</li> <li>SainsKomputer</li> <li>PengurusanSistem</li> <li>KecerdasanBuatan</li> </ol> <button onclick="GetListItems ();">Get the list items!</button> </body> </html>
nextElementSibling <html> <head> <script type="text/javascript"> function GetListItems () { var list = document.getElementById ("navigation"); if (list.firstElementChild === undefined) { var child = list.firstChild; while (child) { if (child.nodeType == 1 /*Node.ELEMENT_NODE*/) { alert (child.innerHTML); } child = child.nextSibling; } } else { var child = list.firstElementChild; while (child) { alert (child.innerHTML); child = child.nextElementSibling; } } } </script></head> Example
Creating New Nodes • New nodes can be create using • document.createElement(element) creates a new element node • document.createTextNode(text) creates a new text node
Adding New Nodes to the Document • node.removeChild(oldNode) removes the child oldNode from node • node.appendChild(oldNode) adds newNodes as a new (last) child node to node • node.insertBefore(newNode, oldNode) inserts newNode as a new child node of node before oldNode • node.replaceChild(newNode, oldNode) replaces the child node oldNode of node with newNode
removeChild <html><head> <script type="text/javascript"> function changeContent() { var x = document.getElementById("nav").firstChild; x.parentNode.removeChild(x); } </script></head> <body> <ul id = "nav"> <li><a href="tp.html">SainsMaklumat</a></li> <li><a href="th.html">Multimedia</a></li> <li><a href="tr.html">KomputeranIndustri</a></li> <li><a href="tk.html">SainsKomputer</a></li> <li><a href="ts.html">PengurusanSistem</a></li> </ul> <form> <input type="button" onclick="changeContent()" value="Change content"> </form> </body></html> Example
appendChild <html><head> <script type="text/javascript"> function changeContent() { var x = document.getElementById("nav"); var a = document.createElement("li"); x.appendChild(a); } </script></head> <body> <ul id = "nav"> <li><a href="tp.html">SainsMaklumat</a></li> <li><a href="th.html">Multimedia</a></li> <li><a href="tr.html">KomputeranIndustri</a></li> <li><a href="tk.html">SainsKomputer</a></li> <li><a href="ts.html">PengurusanSistem</a></li> </ul> <form> <input type="button" onclick="changeContent()" value="Change content"> </form></body> Example
insertBefore <html><head> <script type="text/javascript"> function changeContent() { var Parent = document.getElementById("nav"); varNewLI = document.createElement("li"); NewLI.innerHTML = "KecerdasanBuatan"; Parent.insertBefore(NewLI, Parent.firstChild); } </script></head> <body> <ul id = "nav"> <li><a href="tp.html">SainsMaklumat</a></li> <li><a href="th.html">Multimedia</a></li> <li><a href="tr.html">KomputeranIndustri</a></li> <li><a href="tk.html">SainsKomputer</a></li> <li><a href="ts.html">PengurusanSistem</a></li> </ul> <form><input type="button" onclick="changeContent()" value="Change content“> </form> </body></html> Example
replaceChild <html><head> <script type="text/javascript"> function MakeFirst(button) { var container = document.getElementById ("nav"); varfirstButton = container.getElementsByTagName ("button")[0]; if (button != firstButton) { container.replaceChild (button, firstButton); container.insertBefore (firstButton, button.nextSibling); } } </script></head> <body> <div id = "nav"> <button onclick="MakeFirst (this)" style="color:red">SainsMaklumat</button> <button onclick="MakeFirst (this)" style="color:#336633 ">Multimedia</button> <button onclick="MakeFirst (this)" style="color:blue">KomputeranIndustri</button> <button onclick="MakeFirst (this)" style="color:black">SainsKomputer</button> </div> </body></html> Example
Basic DOM functionality (Part 1 of 6). 1 <?xml version = "1.0" encoding = "utf-8"?> 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 4 5 <!-- Fig. 12.2: dom.html --> 6 <!-- Basic DOM functionality. --> 7 <html xmlns = "http://www.w3.org/1999/xhtml"> 8 <head> 9 <title>Basic DOM Functionality</title> 10 <style type = "text/css"> 11 h1, h3 { text-align: center; 12 font-family: tahoma, geneva, sans-serif } 13 p { margin-left: 5%; 14 margin-right: 5%; 15 font-family: arial, helvetica, sans-serif } 16 ul { margin-left: 10% } 17 a { text-decoration: none } 18 a:hover { text-decoration: underline } 19 .nav { width: 100%; 20 border-top: 3px dashed blue; 21 padding-top: 10px } 22 .highlighted { background-color: yellow } 23 .submit { width: 120px } 24 </style> 25 <script type = "text/javascript"> 26 <!-- 27 varcurrentNode; // stores the currently highlighted node 28 varidcount = 0; // used to assign a unique id to new elements 29 Creates a class to highlight text
Basic DOM functionality (Part 2 of 6). Calls function switchTo if the object can be found 30 // get and highlight an element by its id attribute 31 function byId() 32 { 33 var id = document.getElementById( "gbi" ).value; 34 var target = document.getElementById( id ); 35 36 if ( target ) 37 switchTo( target ); 38 } // end function byId 39 40 // insert a paragraph element before the current element 41 // using the insertBefore method 42 function insert() 43 { 44 varnewNode = createNewNode( 45 document.getElementById( "ins" ).value ); 46 currentNode.parentNode.insertBefore( newNode, currentNode ); 47 switchTo( newNode ); 48 } // end function insert 49 50 // append a paragraph node as the child of the current node 51 function appendNode() 52 { 53 varnewNode = createNewNode( 54 document.getElementById( "append" ).value ); 55 currentNode.appendChild( newNode ); 56 switchTo( newNode ); 57 } // end function appendNode 58 Calls function createNewNode to make a new p node with the text in the ins text field Inserts newNode as a child of the parent node, directly before currentNode Highlights newNode with function switchTo Inserts newNode as a child of the current node
Basic DOM functionality (Part 3 of 6). Gets the parent of currentNode, then inserts newNode into its list of children in place of currentNode 59 // replace the currently selected node with a paragraph node 60 function replaceCurrent() 61 { 62 varnewNode = createNewNode( 63 document.getElementById( "replace" ).value ); 64 currentNode.parentNode.replaceChild( newNode, currentNode ); 65 switchTo( newNode ); 66 } // end function replaceCurrent 67 68 // remove the current node 69 function remove() 70 { 71 if ( currentNode.parentNode == document.body ) 72 alert( "Can't remove a top-level element." ); 73 else 74 { 75 varoldNode = currentNode; 76 switchTo( oldNode.parentNode ); 77 currentNode.removeChild( oldNode ); 78 } 79 } // end function remove 80 81 // get and highlight the parent of the current node 82 function parent() 83 { 84 var target = currentNode.parentNode; 85 86 if ( target != document.body ) 87 switchTo( target ); 88 else 89 alert( "No parent." ); 90 } // end function parent Ensures that top-level elements are not removed Highlights oldNode’s parent Removes oldNode from the document Gets the parent node Makes sure the parent is not the body element
Basic DOM functionality (Part 4 of 6). Creates (but does not insert) a new p node Creates a unique id for the new node 91 92 // helper function that returns a new paragraph node containing 93 // a unique id and the given text 94 function createNewNode( text ) 95 { 96 varnewNode = document.createElement( "p" ); 97 nodeId = "new" + idcount; 98 ++idcount; 99 newNode.id = nodeId; 100 text = "[" + nodeId + "] " + text; 101 newNode.appendChild(document.createTextNode( text ) ); 102 return newNode; 103 } // end function createNewNode 104 105 // helper function that switches to a new currentNode 106 function switchTo( newNode ) 107 { 108 currentNode.className = ""; // remove old highlighting 109 currentNode = newNode; 110 currentNode.className = "highlighted"; // highlight new node 111 document.getElementById( "gbi" ).value = currentNode.id; 112 } // end function switchTo 113 // --> 114 </script> 115 </head> 116 <body onload = "currentNode = document.getElementById( 'bigheading' )"> 117 <h1 id = "bigheading" class = "highlighted"> 118 [TajukBesar] DHTML Object Model</h1> 119 <h3 id = "smallheading">[Sub Tajuk] Element Functionality</h3> Creates new text node with the contents of variable text, then inserts this node as a child of newNode Changes class attribute to unhighlight old node Highlights currentNode Assigns currentNode’sid to the input field’s value property
Basic DOM functionality (Part 5 of 6). 120 <p id = "para1">[para1] The Document Object Model (DOM) allows for 121 quick, dynamic access to all elements in an XHTML document for 122 manipulation with JavaScript.</p> 123 <p id = "para2">[para2] For more information, check out the 124 "JavaScript and the DOM" section of Deitel's 125 <a id = "link" href = "http://www.deitel.com/javascript"> 126 [link] JavaScript Resource Center.</a></p> 127 <p id = "para3">[para3] The buttons below demonstrate:(list)</p> 128 <ul id = "list"> 129 <li id = "item1">[item1] getElementById and parentNode</li> 130 <li id = "item2">[item2] insertBefore and appendChild</li> 131 <li id = "item3">[item3] replaceChild and removeChild </li> 132 </ul> 133 <div id = "nav" class = "nav"> 134 <form onsubmit = "return false" action = ""> 135 <table> 136 <tr> 137 <td><input type = "text" id = "gbi" 138 value = "bigheading" /></td> 139 <td><input type = "submit" value = "Get By id" 140 onclick = "byId()" class = "submit" /></td> 141 </tr><tr> 142 <td><input type = "text" id = "ins" /></td> 143 <td><input type = "submit" value = "Insert Before" 144 onclick = "insert()" class = "submit" /></td> 145 </tr><tr> 146 <td><input type = "text" id = "append" /></td> 147 <td><input type = "submit" value = "Append Child" 148 onclick = "appendNode()" class = "submit" /></td> 149 </tr><tr>
Basic DOM functionality (Part 6 of 6). 150 <td><input type = "text" id = "replace" /></td> 151 <td><input type = "submit" value = "Replace Current" 152 onclick = "replaceCurrent()" class = "submit" /></td> 153 </tr><tr><td /> 154 <td><input type = "submit" value = "Remove Current" 155 onclick = "remove()" class = "submit" /></td> 156 </tr><tr><td /> 157 <td><input type = "submit" value = "Get Parent" 158 onclick = "parent()" class = "submit" /></td> 159 </tr> 160 </table> 161 </form> 162 </div> 163 </body> 164 </html> View at browser
Access the Data <form name="personal" action="something.php onsubmit="return checkscript()"> <input type=text size=20 name=name> <input type=text size=20 name=address> <input type=text size=20 name=city> </form> document.personal.name document.personal.address document.personal.city document.forms[0].elements[0] document.forms[0].elements[1] document.forms[0].elements[2] user_input = document.forms[0]. elements[0] .value;
<script type="text/javascript"> function findtheone( ) { varwhichitem = 0; while (whichitem < document.form02.field01.length) { if (document.form02.field01[whichitem].checked) { window.alert('You picked item number ' + (whichitem + 1)); } whichitem++; } } </script> <form class="example" name="form02" method="" action=""> <p> Pick an option ... [<input type="radio" name="field01" value="item1" /> 1] [<input type="radio" name="field01" value="item2" /> 2] [<input type="radio" name="field01" value="item3" /> 3] [<input type="radio" name="field01" value="item4" /> 4] </p> <p> And click the button: <input type="button" name="field02" value="Find the One" onclick="findtheone( );" /> <input type="button" name="field03" value="Set to One" onclick="document.form02.field01[0].checked='true';" /> </p> Example
Other Example <html><head> <script type="text/javascript"> function setSpace() { document.getElementById("ftsm").hspace="80"; document.getElementById("ftsm").vspace="80"; } </script></head> <body> <img id="ftsm" src="ftsm.jpg" alt="FTSM" /> <p>SainsMaklumat : Melalui program ini, disiplin-disiplinseperticapaianmaklumat, enjingelintar, pembrokeranmaklumat, agenmaklumatcerdasdanorganisasimaklumatmerupakansebahagiandaripadateraskepada program ini</p> <input type="button" onclick="setSpace()" value="Set hspace and vspace" /> </body> </html> Example
<html><head> <script type="text/javascript"> var inputs = 0; function addContact(){ var table = document.getElementById('contacts'); vartr = document.createElement('TR'); var td1 = document.createElement('TD'); var td2 = document.createElement('TD'); var td3 = document.createElement('TD'); var inp1 = document.createElement('INPUT'); var inp2 = document.createElement('INPUT'); if(inputs>0){ varimg = document.createElement('IMG'); img.setAttribute('src', 'del2.jpg'); img.onclick = function(){ removeContact(tr); } td1.appendChild(img); } inp1.setAttribute("Name", "Name" +inputs); inp2.setAttribute("Name", "Email"+inputs); table.appendChild(tr); tr.appendChild(td1); tr.appendChild(td2); tr.appendChild(td3); td2.appendChild(inp1); td3.appendChild(inp2); inputs++; }
function removeContact(tr){ tr.parentNode.removeChild(tr); } </script> </head> <body> <table> <tbody id="contacts"> <tr> <td colspan="3"> <a href="javascript:addContact();">Add a Contact</a></td> </tr> <tr> <td></td> <td>Name</td> <td>Email</td> </tr> </tbody> </table> </body></html> Example
Reference : http://help.dottoro.com/ • DHTML objects • DHTML properties • DHTML methods http://www.howtocreate.co.uk/tutorials/javascript/domstructure