jquery选择器(简易版)

  1 //通过类名获取元素
  2 function getByClass(oParent,sClass){
  3     //高版本浏览器使用系统自带方法
  4     if(oParent.getElementsByClassName){
  5         return oParent.getElementsByClassName(sClass);
  6     }else{//ie8及以下  先通过标签名获取此元素父级下的所有元素  再用正则匹配出符合条件的元素
  7         var arr=[];
  8         var reg=new RegExp('\\b'+sClass+'\\b');
  9         var aEle=oParent.getElementsByTagName('*');
 10         for(var i=0; i<aEle.length; i++){
 11             if(reg.test(aEle[i].className)){
 12                 arr.push(aEle[i]);
 13             }
 14         }
 15         return arr;
 16     }
 17 }
 18 
 19 function getByStr(aParent,str){
 20     var aChild=[];
 21 
 22     for(var i=0; i<aParent.length; i++){
 23         switch (str.charAt(0)){
 24             case '#':
 25                 var obj=document.getElementById(str.substring(1));
 26                 aChild.push(obj);
 27                 break;
 28             case '.':
 29                 var aEle=getByClass(aParent[i],str.substring(1));
 30 
 31                 for(var j=0; j<aEle.length; j++){
 32                     aChild.push(aEle[j]);
 33                 }
 34                 break;
 35             default:
 36                 if(/\w+\[\w+=\w+\]/.test(str)){ //input[type=button]
 37                     var aStr=str.split(/\[|=|\]/);
 38                     var aEle=aParent[i].getElementsByTagName(aStr[0]);
 39                     for(var j=0; j<aEle.length; j++){
 40                         if(aEle[j].getAttribute(aStr[1])==aStr[2]){
 41                             aChild.push(aEle[j]);
 42                         }
 43                     }
 44                 }else if(/\w+:\w+(\(\d+\))?/.test(str)){ //li:first li:eq(3)
 45                     var aStr=str.split(/:|\(|\)/);
 46                     var aEle=aParent[i].getElementsByTagName(aStr[0]);
 47                     switch (aStr[1]){
 48                         case 'first':
 49                             aChild.push(aEle[0]);
 50                             break;
 51                         case 'last':
 52                             aChild.push(aEle[aEle.length-1]);
 53                             break;
 54                         case 'eq':
 55                             aChild.push(aEle[aStr[2]]);
 56                             break;
 57                         case 'lt':
 58                             for(var j=0; j<aStr[2]; j++){
 59                                 aChild.push(aEle[j]);
 60                             }
 61                             break;
 62                         case 'gt':
 63                             for(var j=parseInt(aStr[2])+1; j<aEle.length; j++){
 64                                 aChild.push(aEle[j]);
 65                             }
 66                             break;
 67                         case 'odd':
 68                             for(var j=1; j<aEle.length; j+=2){
 69                                 aChild.push(aEle[j]);
 70                             }
 71                             break;
 72                         case 'even':
 73                             for(var j=0; j<aEle.length; j+=2){
 74                                 aChild.push(aEle[j]);
 75                             }
 76                             break
 77 
 78                     }
 79 
 80                 }else if(/\w+>\w+/.test(str)){  //ul>li
 81                     var aStr=str.split('>');
 82                     var aEle=aParent[i].getElementsByTagName(aStr[0]);
 83                     for(var j=0; j<aEle.length; j++){
 84                         for(var k=0; k<aEle[j].children.length; k++){
 85                             if(aEle[j].children[k].tagName.toLowerCase()==aStr[1]){
 86                                 aChild.push(aEle[j].children[k]);
 87                             }
 88                         }
 89                     }
 90                 }else{
 91                     var aEle=aParent[i].getElementsByTagName(str);
 92 
 93                     for(var j=0; j<aEle.length; j++){
 94                         aChild.push(aEle[j]);
 95                     }
 96                 }
 97                 break;
 98         }
 99     }
100 
101     return aChild;
102 }
103 //选择器(实质就是一层一层的向下找)
104 function getEle(str,aParent){
105     var arr=str.replace(/^\s+|\s+$/g,'').split(/\s+/);
106 
107     var aParent=aParent || [document];
108     var aChild=[];
109 
110     for(var i=0; i<arr.length; i++){
111         aChild=getByStr(aParent,arr[i]);
112 
113         aParent=aChild; //这一次选出来结果,作为下一次父级
114     }
115 
116     return aChild;
117 }

 

posted @ 2016-02-10 22:31  agosto  阅读(474)  评论(0编辑  收藏  举报