Create Selector Engine
http://blog.insicdesigns.com/2010/04/creating-your-own-selector-engine/
by ryanwfiorini
HTML
<div id="container" class="test">
<div>child 1</div>
<span>child 2</span>
<div>child 3</div>
<span>child 4</span>
</div>
JavaScript
var Selector = {
getAll: function(e){
return e.all || e.getElementsByTagName('*');
},
getAttr: function(e, name){
var attr = e.attributes.getNamedItem(name);
return attr && attr.value;
}
}
var DOMNodes = function(nodes){
if(!(nodes instanceof Array))
nodes = [nodes];
this.nodes = nodes;
};
DOMNodes.prototype = {
ofTag: function(nm){
var newList = [];
for(var i=0, l=this.nodes.length; i<l; i++){
if( this.nodes[i].tagName == nm.toUpperCase() ){
newList.push(this.nodes[i]);
}
}
return new DOMNodes(newList);
},
hasClass: function(clnm){
var newList = [];
var classRE = new RegExp("\\s?"+clnm+"\\s?");
for(var i=0, l=this.nodes.length; i<l; i++){
if( classRE.test(this.nodes[i].className) ){
newList.push(this.nodes[i]);
}
}
return new DOMNodes(newList);
},
withAttr: function(nm, val){
var newList = [];
for(var i=0, l=this.nodes.length; i<l; i++){
if( Selector.getAttr(this.nodes[i], nm) == val ){
newList.push(this.nodes[i]);
}
}
return new DOMNodes(newList);
}
};
Selector.getAll(document.getElementById('container'));
alert(Selector.getAttr(document.getElementById('container'), 'class'));
alert(new DOMNodes(Selector.getAll(document)).ofTag('div').hasClass('test'));