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


Please note: New comments won't appear immediately, they have to be manually approved (usually done quickly).

Leave a Reply

Your email address will not be published. Required fields are marked *