1. 程式人生 > >$.each和$().each

$.each和$().each

元素 集合 pla 們的 art inpu 過程 工作 一段

$.each()與$(selector).each()不同, 後者專用於jquery對象的遍歷, 前者可用於遍歷任何的集合(無論是數組或對象),如果是數組,回調函數每次傳入數組的索引和對應的值(值亦可以通過this 關鍵字獲取,但javascript總會包裝this 值作為一個對象—盡管是一個字符串或是一個數字),方法會返回被遍歷對象的第一參數.

each()方法能使DOM循環結構簡潔,不容易出錯。each()函數封裝了十分強大的遍歷功能,使用也很方便,它可以遍歷一維數組、多維數組、DOM, JSON 等等
在javaScript開發過程中使用$each可以大大的減輕我們的工作量。

each處理數據

下面提一下each的幾種常用的用法

var arr = [ “one”, “two”, “three”, “four”];
$.each(arr, function(){
alert(this);
});

//上面這個each輸出的結果分別為:one,two,three,four

each處理一維數組

1 2 3 4 5 var arr1 = [ "aaa", "bbb", "ccc" ]; $.each(arr1, function(i,val){ alert(i); alert(val); });

alert(i)將輸出0,1,2
alert(val)將輸出aaa,bbb,ccc

each處理二維數組

1 2 3 4 5   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(i)將輸出為0,1,2,因為這二維數組含有3個數組元素
alert(item)將輸出為 [‘a‘, ‘aa‘, ‘aaa‘],[‘b‘, ‘bb‘, ‘bbb‘],[‘c‘, ‘cc‘, ‘ccc‘]

對此二位數組的處理稍作變更之後

1 2 3 4 5 6 7 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就有更厲害了,能循環每一個屬性

1 2 3 4 5 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中有一段這樣的代碼

1 2 3 4 <input name="aaa" type="hidden" value="111" /> <input name="bbb" type="hidden" value="222" /> <input name="ccc" type="hidden" value="333" /> <input name="ddd" type="hidden" value="444"/>

然後你使用each如下

1 2 3 4 5 6 $.each($("input:hidden"), function(i,val){//此時的val是一個對象,指$("input:hidden")其中的一個對象 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將輸出同樣的結果

each處理對象

$().each,對於這個方法,在dom處理上面用的較多。如果頁面有多個input標簽類型為checkbox,對於這時用$().each來處理多個checkbook,例如:

1.$(“input[name=’ch’]”).each(function(i){
  if($(this).attr(‘checked’)==true)
    {
    //一些操作代碼

    }

});

call方法

call 方法可以用來代替另一個對象調用一個方法。call 方法可將一個函數的對象上下文從初始的上下文改變為由 thisObj 指定的新對象。

引用網上有一個很經典的例子

Js代碼
function add(a,b)
{
alert(a+b);
}
function sub(a,b)
{
alert(a-b);
}
add.call(sub,3,1);

用 add 來替換 sub,add.call(sub,3,1) == add(3,1) ,所以運行結果為:alert(4);

$.each和$().each