這個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裡面應該是迭代每一個元素後檢視返回的值,判斷是否繼續迭代下一個元素

   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