欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

jquery里的each使用方法詳解

 更新時(shí)間:2010年12月22日 14:53:47   作者:  
有個(gè)同事問(wèn)我each使用方法,我把我知道的用法告訴他.他卻說(shuō)不是這樣的.如是在網(wǎng)上小逛了一下,果然用法有很多.下面總結(jié)下大慨的使用方法.
each()函數(shù)是基本上所有的框架都提供了的一個(gè)工具類(lèi)函數(shù),通過(guò)它,你可以遍歷對(duì)象、數(shù)組的屬性值并進(jìn)行處理。jQuery和jQuery對(duì)象都實(shí) 現(xiàn)了該方法,對(duì)于jQuery對(duì)象,只是把each方法簡(jiǎn)單的進(jìn)行了委托:把jQuery對(duì)象作為第一個(gè)參數(shù)傳遞給jQuery的each方法.換句話(huà) 說(shuō):jQuery提供的each方法是對(duì)參數(shù)一提供的對(duì)象的中所有的子元素逐一進(jìn)行方法調(diào)用。而jQuery對(duì)象提供的each方法則是對(duì)jQuery內(nèi) 部的子元素進(jìn)行逐個(gè)調(diào)用。

這個(gè)JQUERY里的核心代碼
復(fù)制代碼 代碼如下:

jQuery.prototype.each=function( fn, args ) {
return jQuery.each( this, fn, args );
}

讓我們看一下jQuery提供的each方法的具體實(shí)現(xiàn),
jQuery.each(obj,fn,arg)
該方法有三個(gè)參數(shù):進(jìn)行操作的對(duì)象obj,進(jìn)行操作的函數(shù)fn,函數(shù)的參數(shù)args。
讓我們根據(jù)ojb對(duì)象進(jìn)行討論:

1.obj對(duì)象是數(shù)組
each方法會(huì)對(duì)數(shù)組中子元素的逐個(gè)進(jìn)行fn函數(shù)調(diào)用,直至調(diào)用某個(gè)子元素返回的結(jié)果為false為止,也就是說(shuō),我們可以在提供的fn函數(shù)進(jìn)行處理,使 之滿(mǎn)足一定條件后就退出each方法調(diào)用。當(dāng)each方法提供了arg參數(shù)時(shí),fn函數(shù)調(diào)用傳入的參數(shù)為arg,否則為:子元素索引,子元素本身
2.obj 對(duì)象不是數(shù)組
該方法同1的最大區(qū)別是:fn方法會(huì)被逐次不考慮返回值的進(jìn)行進(jìn)行。換句話(huà)說(shuō),obj對(duì)象的所有屬性都會(huì)被fn方法進(jìn)行調(diào)用,即使fn函數(shù)返回false。調(diào)用傳入的參數(shù)同1類(lèi)似。
復(fù)制代碼 代碼如下:

jQuery.each=function( obj, fn, args ) {
if ( args ) {
if ( obj.length == undefined ){
for ( var i in obj )
fn.apply( obj, args );
}else{
for ( var i = 0, ol = obj.length; i < ol; i++ ) {
if ( fn.apply( obj, args ) === false )
break;
}
}
} else {
if ( obj.length == undefined ) {
for ( var i in obj )
fn.call( obj, i, obj );
}else{
for ( var i = 0, ol = obj.length, val = obj[0]; i < ol && fn.call(val,i,val) !== false; val = obj[++i] ){}
}
}
return obj;
}

需要特別注意的是each方法中fn的具體調(diào)用方法并不是采用簡(jiǎn)單的fn(i,val)或fn(args),而是采用了 fn.call(val,i,val)或fn.apply(obj.args)的形式,這意味著,在你自己的fn的實(shí)現(xiàn)中,可以直接采用this指針引用 數(shù)組或是對(duì)象的子元素。這種方式是絕大多數(shù)jQuery所采用的一種實(shí)現(xiàn)方式。

還是通過(guò)實(shí)例來(lái)說(shuō)明吧

先看代碼:
復(fù)制代碼 代碼如下:

$("#submit").click(function(){
try{
$('#leftTbl tr').each(function(i){
var emailInput = $("#email_"+(1+i));
if(!re.test(emailInput.val())){
alert("請(qǐng)正確填寫(xiě)email");
emailInput.focus();
throw emailInput;
}else{
email = emailInput.val();
}
});
}catch(e){
return false;
}
$("#pageform").submit();
});

通過(guò)throw 然后catch實(shí)現(xiàn),也可以做了計(jì)數(shù)器到最后判斷他的值!

上面的代碼似乎和標(biāo)題沒(méi)什么關(guān)系,那么在each里如何實(shí)現(xiàn)break與continue 其實(shí)看下面還是有關(guān)系的…
復(fù)制代碼 代碼如下:

$('input').each(function(){
if($(this).val() == ''){
// do something
if(1==1)return false; // 使用return false 來(lái)實(shí)現(xiàn)跳出循環(huán)。
else return true; // 使用return true 來(lái)實(shí)現(xiàn)進(jìn)入下一個(gè)循環(huán)。
}
});

jquery里面應(yīng)該是迭代每一個(gè)元素后查看返回的值,判斷是否繼續(xù)迭代下一個(gè)元素
原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明:同路吧 www.tlbar.com.cn
復(fù)制代碼 代碼如下:

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

相關(guān)文章

最新評(píng)論