zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    SDOI2008 Sandy的卡片
    BZOJ2555 Substring
    CTSC2012 熟悉的文章
    递增
    丢失的牛
    【模板】点分治
    陌上花开(三维偏序)
    Holes(河鼠入洞)
    弹飞河鼠
    树状数组1
  • 原文地址:https://www.cnblogs.com/agosto/p/5186169.html
Copyright © 2011-2022 走看看