each()法はDOMサイクル構造を簡潔にすることができる.each()関数の遍歴、each()の1次元配列、多次元配列の遍歴.

18222 ワード

jqueryのeach()の詳細
each()法はDOMサイクル構造を簡潔にし,誤りを生じにくい.each()関数は非常に強力な遍歴機能をカプセル化し、使用も便利で、1次元配列、多次元配列、DOM、JSONなどjavaScriptの開発過程で$eachを使用することで、私たちの作業量を大幅に軽減することができます.
eachのいくつかのよく使われる使い方を以下に挙げます.
  • each処理1次元配列
  •   var arr1 = [ "aaa", "bbb", "ccc" ];      
      $.each(arr1, function(i,val){      
          alert(i);   
          alert(val);
      });   
    
      
    alert(val)   aaa,bbb,ccc
     alert(i)   0,1,2
    
  • each処理二次元配列
  •    var arr2 = [['a', 'aa', 'aaa'], ['b', 'bb', 'bbb'], ['c', 'cc', 'ccc']]      
      $.each(arr, function(i, item){      
          alert(i);   
          alert(item);      
      });  
    
      :
    
    arr2       ,item                。
    item[0]                     
    alert(item)      ['a', 'aa', 'aaa'],['b', 'bb', 'bbb'],['c', 'cc', 'ccc']
    
  • この2ビット配列の処理を少し変更した後
  • .
    var arr = [['a', 'aa', 'aaa'], ['b', 'bb', 'bbb'], ['c', 'cc', 'ccc']]      
      $.each(arr, function(i, item){      
         $.each(item,function(j,val){
             alert(j);
             alert(val);
      }); 
    });   
    
      :
    
     alert(j)    0,1,2,0,1,2,0,1,2
     alert(val)    a,aa,aaa,b,bb,bbb,c,cc,ccc
    
  • eachはjsonデータを処理し、このeachはもっと強く、各属性
  • を循環することができます.
    var obj = { one:1, two:2, three:3};      
      each(obj, function(key, val) {      
      alert(key);   
      alert(val);      
    });   
    
      :
    
      alert(key)   one two three
    alert(val)   one,1,two,2,three,3
        key         ,  json           - ,    ,      。
       val   obj[key]
    
    ecah  dom  ,     input        。   dom         
    
    
    
    
    
  • 次の
  • を使用します
    $.each($("input:hidden"), function(i,val){  
      alert(val);
      alert(i);
      alert(val.name);
      alert(val.value);   
    });  
    
      :
    
      ,alert(val)   [object HTMLInputElement],          。   
    alert(i)    0,1,2,3 
    alert(val.name);   aaa,bbb,ccc,ddd,    this.name        
    alert(val.value);     111,222,333,444,    this.value        
    
  • 上記のコードを次のように変更すると
  • .
    $("input:hidden").each(function(i,val){
      alert(i);
      alert(val.name);
      alert(val.value);       
    });
    
      :
    
        ,         ,            ,     。                        。
    
  • **jQueryのeach実装(ネットワーク抜粋)**
  • function (object, callback, args) {
    //        :       obj,       fn,     args
    var name, i = 0,length = object.length;
    if (args) {
    	if (length == undefined) {
    		for (name in object) {
    			if (callback.apply(object[name], args) === false) {
    				break;
    			}
    		}
    	} else {
    		for (; i < length;) {
    			if (callback.apply(object[i++], args) === false) {
    				break;
    			}
    		}
    	}
    } else {
    if (length == undefined) {
    	for (name in object) {
    		if (callback.call(object[name], name, object[name]) === false) {
    			break;
    		}
    	}
    } else {
    		for (var value = object[0]; i < length && callback.call(value, i, value) !== false; value = object[++i]) {
    		}
    		/*object[0]  jQuery       DOM  ,  for  ,
    		      jQuery        DOM  ,   callback.call( value,i,value);
    		 callback this    value  ,        ,i     ,value  DOM  ;
    		  callback     function(index, elem) { ... }    。
    		      $("...").each(function(index, elem){ ... });
    		*/
    	}
    }
    	return object;
    }
    
      :
    
    jquery              ,           apply  call     。 fn    ,      this       
           。
    
    1.obj     :
    	each               fn    ,               false  ,    ,        fn      ,
    	            each    。 each     arg   ,fn          arg,   :     ,     
    	
    2.obj       :
    	    1      :fn                 。    ,obj          fn      ,  fn    false。
    	        1  。