Kwissle

My real-time quiz battle game Kwissle.com

Crosstips.org

My fun Crossword solver project. Crosstips.org & Krysstips.se

Kung Fu

Fujian White Crane Kung Fu

Photos

Photoalbum, both old and new.

Twitter

Follow me on Twitter

Contact me

My contact details and how to contact me.

 

KungFuPeople.com
Do you train Kung Fu?
Or know someone who does?
Then check out KungFuPeople.com


Mobile version of this page Mobile version of this page


 
Web development

parentElementsByTagName(doc, tagname, classname)


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:

 /* This function returns a list of elements that are all parents of each
 * 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;
}



Comment

Matt Schinckel - 6th March 2006  [«« Reply to this]
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.
Neville Shaun Ng - 22nd September 2010  [«« Reply to this]
getAttribute("class") doesn't work in IE btw
Neville Shaun Ng - 14th December 2010  [«« Reply to this]
.className needs to be used instead for IE
 
Name:
Email:
hide my email address.

Your email address will be encoded to prevent email-extraction spiders from reading it so you won't get spammed if you decide to show your email address.