国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

jquery里的each使用方法詳解

2019-11-21 00:02:03
字體:
來源:轉載
供稿:網友
each()函數是基本上所有的框架都提供了的一個工具類函數,通過它,你可以遍歷對象、數組的屬性值并進行處理。jQuery和jQuery對象都實 現了該方法,對于jQuery對象,只是把each方法簡單的進行了委托:把jQuery對象作為第一個參數傳遞給jQuery的each方法.換句話 說:jQuery提供的each方法是對參數一提供的對象的中所有的子元素逐一進行方法調用。而jQuery對象提供的each方法則是對jQuery內 部的子元素進行逐個調用。

這個JQUERY里的核心代碼
復制代碼 代碼如下:

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

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

1.obj對象是數組
each方法會對數組中子元素的逐個進行fn函數調用,直至調用某個子元素返回的結果為false為止,也就是說,我們可以在提供的fn函數進行處理,使 之滿足一定條件后就退出each方法調用。當each方法提供了arg參數時,fn函數調用傳入的參數為arg,否則為:子元素索引,子元素本身
2.obj 對象不是數組
該方法同1的最大區別是:fn方法會被逐次不考慮返回值的進行進行。換句話說,obj對象的所有屬性都會被fn方法進行調用,即使fn函數返回false。調用傳入的參數同1類似。
復制代碼 代碼如下:

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的具體調用方法并不是采用簡單的fn(i,val)或fn(args),而是采用了 fn.call(val,i,val)或fn.apply(obj.args)的形式,這意味著,在你自己的fn的實現中,可以直接采用this指針引用 數組或是對象的子元素。這種方式是絕大多數jQuery所采用的一種實現方式。

還是通過實例來說明吧

先看代碼:
復制代碼 代碼如下:

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

通過throw 然后catch實現,也可以做了計數器到最后判斷他的值!

上面的代碼似乎和標題沒什么關系,那么在each里如何實現break與continue 其實看下面還是有關系的…
復制代碼 代碼如下:

$('input').each(function(){
if($(this).val() == ''){
// do something
if(1==1)return false; // 使用return false 來實現跳出循環。
else return true; // 使用return true 來實現進入下一個循環。
}
});

jquery里面應該是迭代每一個元素后查看返回的值,判斷是否繼續迭代下一個元素
原創文章,轉載請注明:同路吧 www.tlbar.com.cn
復制代碼 代碼如下:

var arr = [ "one", "two", "three", "four"];
$.each(arr, function(){
alert(this);
});
//上面這個each輸出的結果分別為:one,two,three,four
var arr1 = [[1, 4, 3], [4, 6, 6], [7, 20, 9]]
$.each(arr1, function(i, item){
alert(item[0]);
});
//其實arr1為一個二維數組,item相當于取每一個一維數組,
//item[0]相對于取每一個一維數組里的第一個值
//所以上面這個each輸出分別為:1 4 7
var obj = { one:1, two:2, three:3, four:4};
$.each(obj, function(key, val) {
alert(obj[key]);
});
//這個each就有更厲害了,能循環每一個屬性
//輸出結果為:1 2 3 4
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金湖县| 罗山县| 来宾市| 临安市| 海林市| 彭山县| 伊春市| 安泽县| 鄄城县| 黄石市| 万山特区| 佳木斯市| 班玛县| 和静县| 酒泉市| 习水县| 上饶市| 西畴县| 阳春市| 库车县| 浑源县| 德江县| 剑阁县| 衡南县| 河曲县| 郯城县| 蒲江县| 中卫市| 库伦旗| 阜宁县| 陈巴尔虎旗| 鄄城县| 河东区| 怀柔区| 旬阳县| 固始县| 板桥市| 山阴县| 封丘县| 宕昌县| 塔城市|