在jquery中,遍歷對(duì)象和數(shù)組,經(jīng)常會(huì)用到$().each和$.each(),兩個(gè)方法。兩個(gè)方法是有區(qū)別的,從而這兩個(gè)方法在針對(duì)不同的操作上,顯示了各自的特點(diǎn)。
$().each,對(duì)于這個(gè)方法,在dom處理上面用的較多。如果頁(yè)面有多個(gè)input標(biāo)簽類型為checkbox,對(duì)于這時(shí)用$().each來(lái)處理多個(gè)checkbook,例如:
$(“input[name=’ch’]”).each(function(i){if($(this).attr(‘checked’)==true){//一些操作代碼
}
回調(diào)函數(shù)是可以傳遞參數(shù),i就為遍歷的索引。
對(duì)于遍歷一個(gè)數(shù)組,用$.each()來(lái)處理,簡(jiǎn)直爽到了極點(diǎn)。例如:
$.each([{“name”:”limeng”,”email”:”xfjylimeng”},{“name”:”hehe”,”email”:”xfjylimeng”},function(i,n){alert(“索引:”+i,”對(duì)應(yīng)值為:”+n.name);});
參數(shù)i為遍歷索引值,n為當(dāng)前的遍歷對(duì)象.
var arr1 = [ “one”, “two”, “three”, “four”, “five” ];$.each(arr1, function(){alert(this);});輸出:one two three four fivevar arr2 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]$.each(arr2, function(i, item){alert(item[0]);});輸出:1 4 7var obj = { one:1, two:2, three:3, four:4, five:5 };$.each(obj, function(key, val) {alert(obj[key]);});輸出:1 2 3 4 5
在jQuery里有一個(gè)each方法,用起來(lái)非常的爽,不用再像原來(lái)那樣寫for循環(huán),jQuery源碼里自己也有很多用到each方法。
其實(shí)jQuery里的each方法是通過(guò)js里的call方法來(lái)實(shí)現(xiàn)的。
下面簡(jiǎn)單介紹一下call方法。call這個(gè)方法很奇妙,其實(shí)官方的說(shuō)明是:“調(diào)用一個(gè)對(duì)象的一個(gè)方法,以另一個(gè)對(duì)象替換當(dāng)前對(duì)象。”網(wǎng)上更多的解釋是變換上下文環(huán)境,也有說(shuō)是改變上下文this指針。call([thisObj[,arg1[, arg2[, [,.argN]]]]])
參數(shù)thisObj可選項(xiàng)。將被用作當(dāng)前對(duì)象的對(duì)象。arg1, arg2, , argN可選項(xiàng)。將被傳遞方法參數(shù)序列。
說(shuō)明call 方法可以用來(lái)代替另一個(gè)對(duì)象調(diào)用一個(gè)方法。call 方法可將一個(gè)函數(shù)的對(duì)象上下文從初始的上下文改變?yōu)橛?thisObj 指定的新對(duì)象。
引用網(wǎng)上有一個(gè)很經(jīng)典的例子
Js代碼function add(a,b){alert(a+b);}function sub(a,b){alert(a-b);}add.call(sub,3,1);
用 add 來(lái)替換 sub,add.call(sub,3,1) == add(3,1) ,所以運(yùn)行結(jié)果為:alert(4);注意:js 中的函數(shù)其實(shí)是對(duì)象,函數(shù)名是對(duì) Function 對(duì)象的引用。
具體call更深入的就不在這里提了。
下面提一下jQuery的each方法的幾種常用的用法
Js代碼var arr = [ “one”, “two”, “three”, “four”];$.each(arr, function(){alert(this);});//上面這個(gè)each輸出的結(jié)果分別為:one,two,three,four
var arr1 = [[1, 4, 3], [4, 6, 6], [7, 20, 9]]$.each(arr1, function(i, item){alert(item[0]);});//其實(shí)arr1為一個(gè)二維數(shù)組,item相當(dāng)于取每一個(gè)一維數(shù)組,//item[0]相對(duì)于取每一個(gè)一維數(shù)組里的第一個(gè)值//所以上面這個(gè)each輸出分別為:1 4 7
var obj = { one:1, two:2, three:3, four:4};$.each(obj, function(key, val) {alert(obj[key]);});//這個(gè)each就有更厲害了,能循環(huán)每一個(gè)屬性//輸出結(jié)果為:1 2 3 4
新聞熱點(diǎn)
疑難解答
圖片精選