- Interactive effects
- Dynamically modifying web pages
- Changing the HTML the browser originally downloaded
What we're going to do:
- Identify an element on the page
- Do something to the element
Press → key to advance. Zoom in/out: Ctrl or Command + +/-.
What we're going to do:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>A Basic Web Page</title>
</head>
<body>
<p>
<strong>important text</strong> and
<a href="#">a link</a>.
</p>
</body>
</html>
ancestor | parent | node | textnode | sibling | child | descendent
html
______|____________
| |
head body
______|____ |
| | |
title meta p
| ______|_________
| | | | |
A basic web page strong and a .
| |
| |
important text a link
document.getElementById(); document.getElementsByTagName(); document.getElementsByClassName(); //IE9 document.querySelector(); //IE8 document.querySelectorAll(); //IE8
<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title>A Basic Web Page</title> </head> <body <div id="box"> <ul> <li>Some <strong>imp text</strong></li> <li>And <a href="http://x.com">a link</a>.</li> <li class="cl">With a class</li> <li class="cl">another classed</li> <li class="di">Has an ID</li> </ul> </div> </body> </html>
var box = document.getElementById('box');
var box = document.querySelector('#box');
var lis = box.getElementsByTagName('li');
var lis = box.querySelectorAll('li');
var classed = lis.getElementsClassName('cl');
var classed = box.querySelectorAll('.cl');
lis.length?
box.length?
classed.length?
html (parent)
______|____________
| |
head siblings body (children)
p (parent)
______|_________
| | | |
strong and a . (children and siblings)
var box = document.querySelector("#box");
var ul = box.getElementsByTagName("ul")[0];
// includes empty text nodes too
var kids = ul.childNodes;
// text if textnode, value if attribute node, null if element
var first = kids[0].nodeValue;
Parents
var lis = box.getElementsByTagName('li');
var ul = lis[1].parentNode;
Siblings
var firstli = lis[1].prevSibling; var thirdli = lis[1].nextSibling;
We need to find a DOM node so that we can add content to it, before it, after it, etc.
<div id="changeme"> <ul> <li>Some <strong>imp text</strong></li> <li>And <a href="http://x.com">a link</a>.</li> <li class="cl">With a class</li> <li class="cl">another classed</li> <li class="di">Has an ID</li> </ul> </div>
//find elements
var lis = document.querySelectorAll('#changeme li');
//change the content of one
lis[2].innerHTML = 'JavaScript Rocks';
//find elements
var lis = document.querySelectorAll('#changeme li');
//change the content of one
lis[2].innerHTML = 'JavaScript Rocks';
//find another elements
var strong = lis[0].getElementsByTagName('strong');
//change that content too
strong[0].innerHTML = 'emboldened content';
var newLI = document.createElement('li');
newLI.setAttribute('class', 'myClass');
var textNode = document.createTextNode("some text");
newLI.appendChild(textNode);
var myUL = document.querySelector("#changeme ul");
myUL.appendChild(newLI);
var lis = document.querySelectorAll('#changeme li');
lis[4].parentNode.removeChild(lis[4]);
var box = document.getElementById('changeme');
var list = box.getElementsByTagName('ul')[0];
var fifthitem = box.getElementsByTagName('li')[4];
var item = list.removeChild(fifthitem);
Slide 11 displays the text created by the markup on slide 10. Let's play with it! In the console on slide 11 do the following: