dom 层次遍历-仿underscore

来源:互联网 发布:微盟软件退款 编辑:程序博客网 时间:2024/05/04 12:06
经常在面试题中看到dom层次遍历,自己尝试着用underscore的式的方法写了个,试着还可以用。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title></head>
<body>
 <div id="par">
   <div id="first">
                      <p id="first1">
                         <span id="first11"><span id="first111"></span></span>
                    </p>
                 </div>
               <div id="two">
                   <p id="two1">
                     <span id="two11"></span>
                  </p>
                 <p id="two2"></p>          
              </div>
             <div id="three">
                  <p id="three1">
                      <span id="three11"></span>
                 </p>
            </div>
        </div>
 
<script type="text/javascript">
            var par=document.getElementById('par');
  (function (){
    var _=function(){};
    this._=_;
    function searchN(e,n){
              var arr=[],
                  eles,
                  level=0;
              if(!n){
                 n=1;}
              if(e && e.nodeType==1){
                arr.push(e);}
              else {
                return null;}
              while(arr.length!=0){
                if(n==level){return arr;}
                    len=arr.length;
                     
                    while(len--){
                      
                      e=arr.shift();
                      
                      eles=e.childNodes;
                      
                      for (var i = 0,length=eles.length; i < length; i++) {
                         if(eles[i] && eles[i].nodeType==1){arr.push(eles[i]);}
                      };
                    }
               
                    level++;
              }
              return false;
            }
            _.searchN=searchN;
  }).call(this);
          
 
              console.log(_.searchN(par,2));

</script>
</body>
</html>

  1. (function (){
  2.             var _=function(){};
  3.             this._=_;//挂载
  4.             function searchN(e,n){
  5.               var arr=[],
  6.                   eles,
  7.                   level=0;
  8.               if(!n){
  9.                  n=1;}
  10.               if(e && e.nodeType==1){
  11.                 arr.push(e);}
  12.               else {
  13.                 return null;}
  14.               while(arr.length!=0){
  15.                 if(n==level){return arr;}
  16.                     len=arr.length;
  17.                      
  18.                     while(len--){//len记录每一层节点的个数
  19.                       
  20.                       e=arr.shift();//每次取出一个,直至该层所有的孩子被取出。
  21.                       
  22.                       eles=e.childNodes;//得到每一层的所有孩子节点,这个地方也可以用e.children
  23.                       
  24.                       for (var i = 0,length=eles.length; i < length; i++) {
  25.                             if(eles[i] && eles[i].nodeType==1){arr.push(eles[i]);}//将孩子节点暂存数组中
  26.                       };
  27.                     }
  28.                
  29.                     level++;//当每一层节点遍历结束,层数加1
  30.               }
  31.               return false;
  32.             }
  33.             _.searchN=searchN;
  34.   }).call(this);

文章来源:http://www.youjobit.com/news/index.php?id=89
0 0
原创粉丝点击