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'));