
Added by thebman220 on October-12-2008, 10:22 pm
var checks=getElemsInElem(document.body,"tagName=/input/i&type=/checkbox/i",true,true);The same works with boolean values. To find all checked check boxes, you can use:
var conds="tagName=/input/i&type=/checkbox/i&checked=/true/"; var checkedChecks=getElemsInElem(document.body,conds,true,true);
/**
* @param object inElem : The DOM element to be searched
* @param string attrSets : A string containing the search terms in the
* format "term1=value1&term2=value2"
* @param boolean deep : optional; whether or not to search
* : recursively; defalut is true
* @param boolean reg : if the search values should be evaluated as
* regular expressions; default is false
* @return object : an Array containing all matched elements
* @requires : function elemHasAttribute
* @requires : function elemGetAttribute
* @requires : function parseRegExp
*/
function getElemsInElem(inElem,attrSets,deep,reg) {
if (typeof deep=="undefined") {
deep=true;
}
if (typeof reg=="undefined") {
reg=false;
}
if (typeof attrSets!="object") {
var sets=(""+attrSets).split("&");
attrSets=new Array();
for (var i=0; i<sets.length; i++) {
var index=sets[i].indexOf("=");
var value=sets[i].substring(index+1);
attrSets[sets[i].substring(0,index)]=reg?parseRegExp(value):value;
}
}
var elems=new Array();
for (var i=0; i<inElem.childNodes.length; i++) {
var elem=inElem.childNodes[i];
if (elem.nodeType==3) {continue;} // Node.TEXT_NODE
var isElem=true;
for (var attr in attrSets) {
if (!elemHasAttribute(elem,attr)) {
isElem=false;
break;
} else {
var value=elemGetAttribute(elem,attr);
if (!(reg?attrSets[attr].test(value):value==attrSets[attr])) {
isElem=false;
break;
}
}
}
if (isElem) {
elems[elems.length]=elem;
}
if (deep&&elem.childNodes.length>0) {
var childElems=getElemsInElem(elem,attrSets,deep,reg);
for (var j=0; j<childElems.length; j++) {
elems[elems.length]=childElems[j];
}
}
}
return elems;
}
/**
* @param string str : A string containing a regular expression
* @return object : A RegExp object on success or null otherwise
*/
function parseRegExp(str) {
var start=str.indexOf("/");
var end=str.lastIndexOf("/");
if (start==end) {return null;}
var reg=str.substring(start+1,end);
var flags=str.substring(end+1);
return new RegExp(reg,flags);
}
/**
* @param object elem : the DOM element to be tested
* @param string attr : the attribute to test for
* @return boolean : true if the attribute exists, false otherwise
*/
function elemHasAttribute(elem,attr) {
var isset;
try {
eval("isset=typeof elem."+attr+"!='undefined';");
} catch (e) {
try {
isset=elem.hasAttribute(attr);
} catch (e) {
isset=false;
}
}
return isset;
}
/**
* @param object elem : the DOM element to be used
* @param string attr : the attribute to get
* @return boolean : the value of the attribute or null on error
*/
function elemGetAttribute(elem,attr) {
try {
return eval("elem."+attr);
} catch (e) {
return null;
}
}
Added by thebman220 on October-14-2008, 4:36 pm
Added by thebman220 on October-13-2008, 5:01 pm
Added by thebman220 on October-13-2008, 12:13 am
Added by thebman220 on October-12-2008, 9:36 pm
Added by thebman220 on October-12-2008, 9:20 pm