Okay, first english article. I’m feeling kind of stupid when posting code related topics in German so I’m gonna try to bring some english content in here. Personally I think that comments, variable names and everything code-related should be written in english – considering multi-national development teams.
So, enough introduction. What follows is one single function performing stupid javascript actions with the Document Object Model. Even though every sane developer prefers the use of a library like jQuery for stuff like that, it’s always good to know what goes on behind the scenes. What I’ve covered are the following functions:
- document.
- createElement
- createTextNode
- getElementsByTagName
- getElementsByName
- getElementById
- node.
- appendChild
- removeChild
- className
- setAttribute
- getAttribute
- children
- tagName
- parentNode
- style.setProperty
- style.removeProperty
- style.cssText
- innerHTML
- insertBefore
- previousSibling
- nextSibling
I think the code is document good enough, feel free to play around with it.
<!DOCTYPE html> <html> <head> <script> function doStuff() { var container = document.createElement("div"), h1 = document.createElement("h1"), text = document.createTextNode("important headline"), body = document.getElementsByTagName("body")[0]; //add the text 'important headline' to the h1 h1.appendChild(text); h1.className = "headline"; //add <h1>important headline</h1> to the container container.appendChild(h1); container.setAttribute('id','wrapper'); //add the container with h1 and //text to the body (make it visible) body.appendChild(container); /* Markup is now: <body> <div id="wrapper"> <h1 class="headline">wichtige Überschrift</h1> </div> </body> */ //DIV == DIV -> true //tagName is basically the same as nodeName, //except for the behaviour with text nodes alert(body.children[0].tagName == h1.parentNode.tagName); //uh oh, we "accidently" deleted the container //variable (not the container itself) container = null; //so we get it again container = document.getElementById("wrapper"); //some css stuff container.style.setProperty("border","4px solid red"); //overwrites all previous styles like the border set before var cssText = 'color:blue;text-decoration:underline;'; container.style.cssText = cssText; //other way to do that: container.setAttribute('style',cssText); //make it black again container.style.removeProperty("color"); //set name h1.setAttribute("name","theName"); alert(h1.getAttribute("name")); //and remove its class h1.removeAttribute('class'); h1.innerHTML = "my new headlinetext"; //ah damn, same again ;) h1 = null; //recover h1 h1 = document.getElementsByName("theName")[0]; /* markup is now: <body> <div id="wrapper" style="text-decoration: underline;"> <h1 name="theName">my new headlinetext</h1> </div> </body> */ var span = document.createElement("span"); span.appendChild(document.createTextNode("here comes the span")); container.insertBefore(span,h1); /* markup is now: <body> <div id="wrapper" style="text-decoration: underline; "> <span>here comes the span</span> <h1 align="center">my new headlinetext</h1> </div> </body> */ alert(h1.previousSibling.tagName == span.tagName); //span == span alert(span.nextSibling.tagName == h1.tagName); //h1 == h1 container.removeChild(h1); //and the headline is gone /* markup is now: <body> <div id="wrapper" style="text-decoration: underline; "> <span>here comes the span</span> </div> </body> */ } window.onload = doStuff; </script> </head> <body> </body> </html>