250 likes | 390 Views
Advanced DOM. Builds on last presentation on DOM Allows you to dynamically create elements and position them on a page DOM methods/properties are W3C standard innerHTML is not officially part of the standard. The DOM Tree. When Web page is loaded into the browser
E N D
Advanced DOM • Builds on last presentation on DOM • Allows you to dynamically create elements and position them on a page • DOM methods/properties are W3C standard • innerHTML is not officially part of the standard
The DOM Tree • When Web page is loaded into the browser • Every element on the page gets a "reference" • New elements can be created and referenced • JavaScript code can use these references to create new elements on a page
Reminder Graphs • The next few slides are a repeat of some graphs I used in the last presentation and will used again here • We need to know what's on a page to know where to place new elements
Types of Nodes Element nodes point to the element itself, not its content! Two other kinds of nodes for content A text node is anything contained between the angle brackets An attribute node is used to access attributes of a tag (e.g. 'href')
Simplified HTML Code • <html> • <head> • <title>DOMinating JavaScript</title> • </head> • <body id="mybody"> • <h1> DOMinating JavaScript </h1> • <p> If you need some help, you might like to read articles from <a href="http://www.danwebb.net/ ">Dan Webb</a>, <a href="http://www.quirksmode.org/">PPK</a> • and <a href="http://adactio.com/">Jeremy Keith</a>. </p> • </body></html>
Text Nodes Each text node has its own value and is attached to an element node
Attribute Nodes Attribute nodes point to the attributes of the element Here we see an "Anchor" element node with a text node and two attribute nodes, "href" and "rel"
Two Step Process • To get a brand new element on a page… 1. Create the element in a JavaScript variable • Place the element on the page
Create an Element • Elements are things like <p>, <li>, <div>, etc. • To create an element use the DOM method createElement, e.g. varmypara = document.createElement("p"); • This creates a paragraph element • Stores a reference to the element in mypara
Adding a Child Element • One way to place a dynamically created element on a page is with the appendChild • First get a reference to a parent node and add another child element to the end e.g. varmypara = document.createElement("p"); varmybody = document.getElementById("mybody"); mybody.appendChild(mypara); • We are still not finished…
Adding Text to the Paragraph • In the last slide, I created an empty paragraph and added to the end of elements in the body. • To add text to an paragraph you first must use the createTextElement method and then append that to the paragraph element, e.g. varmyText = document.createTextNode("Hello World!"); mypara.appendChild(myText);
Exercise 5.1 • Create a small HTML file with a paragraph and a button in the body • Use JavaScript to add a paragraph to the display that says "I did it!" when the button is clicked
Questions • Where did the paragraph appear on the page? • What happens if you click the button a few more times?
Inserting an Element • If you want to place an element before an existing element, use insertBefore • Syntax: parentElement.insertBefore(newElement, targetElement) • Example: var gallery = document.getElementById('imagegallery'); gallery.parentNode.insertBefore(placeholder, gallery);
Seems a Bit Strange • You have to get the parent of the element you want to insert before then insert before that element.vargallery = document.getElementById('imagegallery '); gallery.parentNode.insertBefore(someimage, gallery); • Here is some of the HTML… <h1>Snapshots</h1> <ul id='imagegallery'> <li><imgsrc="images/fireworks.jpg"> • The gallery is a ul element in this example and the DOM/JavaScript code inserts the element someimage before the <ul> list
Exercise 5.2 • Create a small HTML file with a <ul> list and a button in the body. The list items are: John, George, Ringo. • When the button is clicked, use JavaScript to insert a list item "Paul" before "George" list item • NOTE: only put an id value on the <ul> tag, not any of the list items.
Clone an Element • You can make an exact copy of an element node by using the cloneNode function • Example… var list = document.getElementById("headlines"); varnewlist = list.cloneNode();
Clone an Element and Children • To clone the entire list (with child nodes) like so… var list = document.getElementById("headlines"); varnewlist = list.cloneNode(true);
Exercise 5.3 • Create a small HTML file with a <ul> list and a button in the body. The list items are: John, Paul, George, Ringo. • When the button is clicked, use JavaScript to make a copy of the entire list and insert it below the original list and before the button • NOTE: only put an id value on the <ul> tag, not any of the list items.
Removing Elements • To remove elements use the removeChild method • NOTE: If an Element that you remove has children then all children are removed as well var message = document.getElementById('msg'); var container = message.parentNode; container.removeChild(message);
Exercise 5.4 • Create a small HTML file with a <ul> list and a button in the body. The list items are: John, Paul, George, Ringo. • When the button is clicked, use JavaScript to make a remove Paul from the list • NOTE: Use an id value for "Paul"
Replacing Elements • To replace an element use the replaceChildmethod varmessage = document.getElementById('msg'); var container = message.parentNode; varpara = document.createElement('p'); container.replaceChild(para, message); - this replaces message with para
Exercise 5.5 • Create a small HTML file with a <ul> list and a button in the body. The list items are: John, Paul, George, Pete. • When the button is clicked, use JavaScript to make a replace the listitem for Pete to a listitem for Ringo • NOTE: Use an id value for "Pete"
More Things to Know • hasChildNodes • Boolean value = element.hasChildNodes • If (mylist.hasChildNodes) { … • Useful nodeType values 1: Element2: Attribute3: Text 8: Comment
End • End of Lesson