$.each和$().each
$.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是一個對象,指
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