仿jquery 选择器功能

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>1223</title>
</head>

<body>
<div class="wrapper" id="wrapper">
    <div class="list" id="list">
        <ul>
            <li class="liFirst" id="liFirst">111</li>
            <li>131</li>
            <li><span>131</span></li>
        </ul>
        <span></span>
    </div>
    <div class="list">4444<div>
</div>
<script type="text/javascript">
window.onload = function(){
    function EQuery(vArg){
        var base = {
            oneArr:[],                // 匹配单个内容
            totalArr:[],            // 匹配多个单个内容
            ele:[],                    // 实际匹配的元素
            i:0,                    // 变量
            parentEle:null,            // 复制 oneArr 作为下一次循环的父级
            getId:function(id){
                return document.getElementById(id);
            },
            getClass:function(classname,parent,tagname){
                //div.list .liFirst
                // .list parent  div
                var arr = [];
                for(var i=0,len=parent.length;i<len;i++){
                    var arr2 = [];
                    if(document.getElementsByClassName){    // firefox 下获取class
                        arr2 = parent[i].getElementsByClassName(classname);
                        tag(tagname,arr2);
                    }else{
                        var dom = parent[i].getElementsByTagName("*");
                        for(var i=0,ielen=dom.length;i<ielen;i++){
                            if(dom[i].className == classname){
                                arr2.push(dom[i]);
                            }
                        }
                        tag(tagname,arr2);
                    }
                }
                function tag(tagname,arr2){
                    if(tagname != undefined){
                        for(var j=0,lens=arr2.length;j<lens;j++){
                            if(arr2[j].tagName.toLowerCase() == tagname){
                                arr.push(arr2[j]);
                            }
                        }
                    }else{
                        for(var j=0,lens=arr2.length;j<lens;j++){
                            arr.push(arr2[j]);
                        }
                    }
                }
                return arr;
            },
            getDom:function(dom,parent){
                var arr = [],
                    arr2 = [];
                for(var i=0,len=parent.length;i<len;i++){
                    arr2 = parent[i].getElementsByTagName(dom);
                }
                arr = arr2;
                return arr;
            }
        }
        base.totalArr = vArg.split(/\s+/);
        while(base.i<base.totalArr.length){    
            (function(vArg,base){                     // vArg 为匹配的单个内容
                if(/^#/.test(vArg) || /^\./.test(vArg) || (!/\.|#/.test(vArg)) ){
                    base.oneArr = [vArg];            // #id  .class   tagname
                }else{
                    base.oneArr = /^(\w+)([\W]\w+)/.exec(vArg);
                    if(base.oneArr[0] == vArg){        // tagname#id  tagname.class
                        base.oneArr.shift();
                    }
                    base.oneArr.reverse();            // #id tagname .class tagname
                }
                var a = base.oneArr[0],
                    b = base.oneArr[1];
                switch(a.charAt(0)){
                    case "#":
                        base.ele = [base.getId(a.substr(1))];
                        break;
                    case ".":
                        base.parentEle = base.parentEle || [document];
                        base.ele = base.getClass(a.substr(1),base.parentEle,b);
                        break;
                    default:
                        base.parentEle = base.parentEle || [document];
                        base.ele = base.getDom(a,base.parentEle);
                        break;
                }
            })(base.totalArr[base.i],base);
            base.parentEle = base.ele;
            base.i++;
        }
        this.ele = base.ele;
    }
    EQuery.prototype.css = function(attr,value){
        for(var i=0,len = this.ele.length;i<len;i++){
            this.ele[i].style[attr] = value;
        }
    }
    function $(vArg){
        return new EQuery(vArg);
    }
    $("div#wrapper li span").css("color","#ccc");
}
</script>
</body>
</html>

posted @ 2013-09-03 16:26  修次Edward  阅读(156)  评论(0编辑  收藏  举报