Old code: DOM extensions (2004-2006)
Nowadays I'm using something more powerful like jQuery or base2.DOM, but if you don't, these might prove useful.
/* * Copyright 2004-2006 Toni Corvera <outlyer@outlyer.net> * * License: http://www.gnu.org/copyleft/lgpl.html LGPL * * Extra DOM-like methods (Note that at the time of writing they can't be * bound to the Document prototype, so they are global functions) * * getFirstChildByTagName(HTMLElement parent, String tagName) * First child of parent with tag tagName, NOT-RECUSIVE * getFirstSiblingByTagName(HTMLElement node, String tagName) * See above * getChildrenByClassName(Node parent, String className) * Obtains an array with the children of parent that have * the class className (supports multi-class elements), NOT-RECURSIVE * getChildrenByTagName(Node parent, String tagName) * Obtains an array with the children of parent that have * the tag tagName, NOT-RECURSIVE * * hasClass(HTMLElement element, String className) * Checks if element has class className, supports multi-class elements * removeClass(HTMLElement element, String className) * Remove class className from element's classes if present, supports * multi-class elements */ // boolean hasClass(HTMLElement e, String className) function hasClass(e, c) { if (!document.getElementById) return false; if (!e.className) return false; return null!=e.className.match(new RegExp('^(w*|.* )'+c+'(w*| .*)$')); } // void removeClass(HTMLElement e, String className) function removeClass(e, c) { if (!hasClass(e, c)) return; e.className = e.className.replace(new RegExp(c,'g'),''); } // HTMLElement getFirstChildByTagName(HTMLElement parent, String tagName) function getFirstChildByTagName(e,tag){ if (!document.getElementById) return null; var f=null; for (var i=0;i<e.childNodes.length;++i) { if (e.childNodes[i].tagName == tag) { f = e.childNodes[i]; break; } } return f; } // HTMLElement getFirstSiblingByTagName(HTMLElement node, String tagName) function getFirstSiblingByTagName(e,t) { if (!document.getElementById) return null; var f=null; if (null==e.nextSibling || e.nextSibling.tagName==t) return e.nextSibling; return getFirstSiblingByTagName(e.nextSibling,t); } // Array getChildrenByClassName(Node parent, String className) function getChildrenByClassName(n,c) { if (!document.getElementById) return null; var a=new Array(); for (var i=0; i<n.childNodes.length; ++i) { var x=n.childNodes[i] if(hasClass(x,c)){a.push(x);} a.concat(getChildrenByClassName(x,c)); } return a; } // Array getChildrenByTagName(Node parent, String tagName) function getChildrenByTagName(n,t) { if (!document.getElementById) return null; var a=new Array(); for(var i=0; i<n.childNodes.length;++i){ var x=n.childNodes[i]; if(x.tagName==t){a.push(x);} a.concat(getChildrenByTagName(x,t)); } }
Downloadable file: http://p.outlyer.net/graveyard/net_outlyer_dom_exts.js