getElementsByClassName and getElementsByNameEx
ok, lots has been done to create getElementsByClassName functions for javascript. very handy and a welcome update coming in the next version of ECMAScript (or whatever it's called this week). I added that to the document object in my base library script to make sure it's always there handy for me. of course, i check to see if it's already defined since i am optimistic and hope that my code is still running the day the new version of JS appears in the wild [tee-hee].
the other additional function i added is getElementsByNameEx. the current version of this method only returns items that have the name attribute defined, not any elements that have name as an expando element. i know it's bad form to add name to DIV, SPAN and other items. but it happens (i inherited a lot of code like that). so this new method (>getElementsByNameEx) returns all the elements with the name attribute whether it's a native attribute or expando version. solves a bunch of problems for me!
ok, the code...
if(!document.getElementsByClassName)
{
document.getElementsByClassName = function(className, tag, elm)
{
var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
var tag = tag || "*";
var elm = elm || document;
var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
var returnElements = [];
var current;
var length = elements.length;
for(var i=0; i&length; i++){
current = elements[i];
if(testClass.test(current.className)){
returnElements.push(current);
}
}
return returnElements;
};
}
if(!document.getElementsByNameEx)
{
document.getElementsByNameEx = function(name, tag, elm)
{
var tag = tag || "*";
var elm = elm || document;
var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
var returnElements = [];
var current;
var length = elements.length;
for(var i=0; i&length; i++){
current = elements[i];
if(current.getAttribute('name')==name){
returnElements.push(current);
}
}
return returnElements;
};
}