Mobile version of this pagetightVNC and Chicken of the VNC
Next:
Squeezebox + Pandora
Related blogs
DOM ScriptingLesson learnt with creating DOM element with jQuery
Are you a web developer? Then VisiBone is for you
V8 < TraceMonkey < SquirrelFish
Related by category
parentElementsByTagName(doc, tagname, classname)
dom tree, javascript function, dom scripting, dom, parentnode, nodename, tagname
6th of March 2006
I've just written a little javascript function that I have myself found extremely valuable when doing DOM scripting. It's called parentElementsByTagName() and even if it's name isn't great it really does work and has proven very useful for my app.
At any starting point in a DOM tree (first parameter) it goes "up the tree" by looping over "currentelement.parentNode". The second parameter is the tag name (eg. "div") and the third parameter is optional and it's a class name that that tag name needs to have.
I wrote this because I found myself writing this.parentNode.parentNode.parentNode... in my Javscript code and thought I'd stop that sillyness.
Here's my code. I'm sure it ain't perfect but it's helped me a lot and maybe it will help others:
* other and parent of 'doc'. They're matched by tagname and *optionally*
* classname. */
function parentElementsByTagName(doc, tagname, classname) {
var findings = new Array();
var digg_in = doc;
while (digg_in.parentNode) {
digg_in = digg_in.parentNode;
if (digg_in.nodeName.toLowerCase() == tagname.toLowerCase()) {
if (arguments.length==3) {
if (digg_in.getAttribute('class') &&
digg_in.getAttribute('class').toLowerCase().indexOf(classname.toLowerCase())>-1) {
findings.push(digg_in);
}
} else {
// no doubt
findings.push(digg_in);
}
}
}
return findings;
}







Save this page in del.icio.us
I wrote a similar function, but mine was to find the parent form:
function parentForm(node) {
if (node==document) return false;
if (node.tagName=="FORM") return node;
return parentForm(node.parentNode);
}
I kinda like it, as it's very simple - and uses recursion to make it even simpler. I don't know if there's a limit in JavaScript to the number of stack that can be recursed.