+ -
当前位置:首页 → 问答吧 → 没事找事做,元素选择代码

没事找事做,元素选择代码

时间:2011-01-05

来源:互联网


  1.     //元素操作
  2.     function element(){ // return false or a elements array
  3.         if(!arguments[0]) return;
  4.         var limits = doc = document;
  5.         var arg = (arguments[0].replace(/(^\s*)|(\s*$)|/g,"")).replace(/(\s{2,})/g," "); //去除前后空白并规范间隔
  6.         var es = arg.split(" "); //将各个单元切开
  7.         var elementReg = /([^#\.][A-Za-z]*)|(#[\w\-]+)|(\.[\w\-]+)/g; //分割一个单元里的各种成分正则
  8.         var markArr,mark;
  9.         var result,one_rs = false;//某个单元结果
  10.         var id_arr,class_arr,tag_arr; //单元成分存储
  11.         var id_l,class_l,tag_l; //各种成分数量
  12.         for(var firstItem = es.shift();!!firstItem;firstItem = es.shift()){
  13.             id_arr=[],class_arr=[],tag_arr=[];
  14.             //将一个单元的各种成分分割存储
  15.             while(markArr = elementReg.exec(firstItem)){
  16.                 mark = markArr[0];
  17.                 switch(mark.charAt(0)){
  18.                     case "#": //id获取元素
  19.                         id_arr.push(mark.slice(1));
  20.                     break;
  21.                     case "."://class获取元素
  22.                         class_arr.push(mark.slice(1));
  23.                     break;
  24.                     default: //标签获取元素
  25.                         tag_arr.push(mark.toLowerCase()); //把标签转成小写的方便以后比较
  26.                 }
  27.             }
  28.             //人口普查
  29.             id_l=id_arr.length,class_l=class_arr.length,tag_l=tag_arr.length;
  30.             
  31.             //单元成分里有id的话
  32.             if(id_l){
  33.                 //one_rs = this.getById(id_arr[0],limits);
  34.                 var childs = this.t("*",limits);
  35.                 for(var c_index in childs){
  36.                     if(childs[c_index].id == id_arr[0]){
  37.                         one_rs = [childs[c_index]];
  38.                         break;
  39.                     }
  40.                 }
  41.                 if(one_rs.length<1){
  42.                     return false;
  43.                 }
  44.             }
  45.             //单元成分里有标签的话
  46.             if(tag_l){
  47.                 if(one_rs){
  48.                     if(one_rs[0].tagName.toLowerCase() != tag_arr[0]){
  49.                         return false;
  50.                     }
  51.                 }else{
  52.                     one_rs = this.t(tag_arr[0],limits);
  53.                 }
  54.             }
  55.             //单元成分里有类的话
  56.             if(class_l){
  57.                 if(one_rs){
  58.                     var one_rs_class;
  59.                     for(var o_r_index in one_rs){
  60.                         one_rs_class = one_rs[o_r_index].className;
  61.                         for(var c_index in class_arr){
  62.                             c_reg = new RegExp("(\\s+"+class_arr[c_index]+"\\s+)|(^"+class_arr[c_index]+"\\s+)|(\\s+"+class_arr[c_index]+"$)|(^"+class_arr[c_index]+"$)");
  63.                             if(!c_reg.test(one_rs_class)){
  64.                                 //alert(one_rs_class+"stop here"+c_reg);
  65.                                 return false;
  66.                             }
  67.                         }
  68.                     }
  69.                 }else{
  70.                     one_rs = this.c(class_arr.join(" "),limits);
  71.                 }
  72.             }
  73.             //最后判断
  74.             if(one_rs && one_rs.length>0){
  75.                 limits = one_rs;
  76.                 one_rs = false;
  77.             }else{
  78.                 //alert(firstItem+"stop");
  79.                 return false;
  80.             }
  81.         }
  82.         result = limits; //纯属无事生非,没事找事
  83.         return result;
  84.     }
  85.    
  86.     element.prototype.i = function(idName){ // return false or a elements array
  87.         var result = false;
  88.         var result_hc = document.getElementById(idName);
  89.         if(result_hc){
  90.             var result = [result_hc];
  91.         }
  92.         return result;
  93.     };
  94.    
  95.     element.prototype.c = function(className,limits){ // return false or a elements array
  96.         var childs = this.t("*",limits),result = [];
  97.         var class_arr = className.split(" ");
  98.         var childClass;
  99.         var c_reg;
  100.         if(childs == false){
  101.             return false;
  102.         }
  103.         var check_state;//判断类名结果
  104.         for(var maxItem=childs.length-1;maxItem>-1;maxItem--){
  105.             childClass = childs[maxItem].className;
  106.             check_state = true; //美好的愿景
  107.             for(var c_index in class_arr){
  108.                 c_reg = new RegExp("(\\s+"+class_arr[c_index]+"\\s+)|(^"+class_arr[c_index]+"\\s+)|(\\s+"+class_arr[c_index]+"$)|(^"+class_arr[c_index]+"$)");
  109.                 if(!c_reg.test(childClass)){
  110.                     //alert(c_reg+"|"+childClass);
  111.                     check_state = false;//愿景在此破灭
  112.                     break;
  113.                 }
  114.             }
  115.             if(check_state) result.push(childs[maxItem]);
  116.         }
  117.         if(result.length<1){
  118.             result = false;
  119.         }
  120.         return result;
  121.     };
  122.    
  123.     element.prototype.t = function(tagName,limits){ // return false or a elements array
  124.         var result = [];            
  125.         if((typeof limits.nodeType != "undefined" && limits.nodeType == 1) || limits == document){
  126.             var result_hc = limits.getElementsByTagName(tagName);
  127.             for(var r_hc_l = result_hc.length-1;r_hc_l>-1;r_hc_l--){
  128.                 result.push(result_hc[r_hc_l]);
  129.             }
  130.         }else if(limits instanceof Array){
  131.             for(var i=0;!!limits[i];i++){
  132.                 var child_rs = this.t(tagName,limits[i]);
  133.                 if(child_rs){
  134.                     result = result.concat(child_rs);
  135.                 }
  136.             }
  137.         }
  138.         if(result.length<1) result = false;
  139.         return result;
  140.     };
  141.    
  142.     element.prototype.getHeight = function(e){
  143.         return Math.max(e.offsetHeight,e.scrollHeight,e.clientHeight);
  144.     };
  145.    
  146.     element.prototype.getWidth = function(e){
  147.         return Math.max(e.offsetWidth,e.scrollWidth,e.clientWidth);
  148.     };
复制代码

作者: shenshike   发布时间: 2011-01-05

  1. //方便使用
  2.         var e = function(){ // return false or a elements array
  3.                 return new element(arguments[0]);
  4.         }
  5.         e._e = e();
  6.         e.i = function(){ // return false or a element
  7.                 var result = e._e.i(arguments[0]);
  8.                 if(result != false){
  9.                         result = result[0];
  10.                 }
  11.                 return result;
  12.         }
  13.         e.t = e._e.t;
  14.         e.c = e._e.c;
复制代码

作者: shenshike   发布时间: 2011-01-05

以后就可以这样了
var divs = e("body div div#test div.test");
var div = e.i("test");//id
var divs = e.c("test");//class
var divs = e.t("div");//tag

没有仔细测过,可能会有错.

作者: shenshike   发布时间: 2011-01-05

为什么说是没事找事呢,因为:
var e = {
      i=document.getElementById;
      t=document.getElementsByTagName;
}

作者: shenshike   发布时间: 2011-01-05