jquery里的each使用方法詳解
更新時間:2010年12月22日 14:53:47 作者:
有個同事問我each使用方法,我把我知道的用法告訴他.他卻說不是這樣的.如是在網(wǎng)上小逛了一下,果然用法有很多.下面總結下大慨的使用方法.
each()函數(shù)是基本上所有的框架都提供了的一個工具類函數(shù),通過它,你可以遍歷對象、數(shù)組的屬性值并進行處理。jQuery和jQuery對象都實 現(xiàn)了該方法,對于jQuery對象,只是把each方法簡單的進行了委托:把jQuery對象作為第一個參數(shù)傳遞給jQuery的each方法.換句話 說:jQuery提供的each方法是對參數(shù)一提供的對象的中所有的子元素逐一進行方法調用。而jQuery對象提供的each方法則是對jQuery內 部的子元素進行逐個調用。
這個JQUERY里的核心代碼
jQuery.prototype.each=function( fn, args ) {
return jQuery.each( this, fn, args );
}
讓我們看一下jQuery提供的each方法的具體實現(xiàn),
jQuery.each(obj,fn,arg)
該方法有三個參數(shù):進行操作的對象obj,進行操作的函數(shù)fn,函數(shù)的參數(shù)args。
讓我們根據(jù)ojb對象進行討論:
1.obj對象是數(shù)組
each方法會對數(shù)組中子元素的逐個進行fn函數(shù)調用,直至調用某個子元素返回的結果為false為止,也就是說,我們可以在提供的fn函數(shù)進行處理,使 之滿足一定條件后就退出each方法調用。當each方法提供了arg參數(shù)時,fn函數(shù)調用傳入的參數(shù)為arg,否則為:子元素索引,子元素本身
2.obj 對象不是數(shù)組
該方法同1的最大區(qū)別是:fn方法會被逐次不考慮返回值的進行進行。換句話說,obj對象的所有屬性都會被fn方法進行調用,即使fn函數(shù)返回false。調用傳入的參數(shù)同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的實現(xiàn)中,可以直接采用this指針引用 數(shù)組或是對象的子元素。這種方式是絕大多數(shù)jQuery所采用的一種實現(xiàn)方式。
還是通過實例來說明吧
先看代碼:
$("#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實現(xiàn),也可以做了計數(shù)器到最后判斷他的值!
上面的代碼似乎和標題沒什么關系,那么在each里如何實現(xiàn)break與continue 其實看下面還是有關系的…
$('input').each(function(){
if($(this).val() == ''){
// do something
if(1==1)return false; // 使用return false 來實現(xiàn)跳出循環(huán)。
else return true; // 使用return true 來實現(xiàn)進入下一個循環(huán)。
}
});
jquery里面應該是迭代每一個元素后查看返回的值,判斷是否繼續(xù)迭代下一個元素
原創(chuàng)文章,轉載請注明:同路吧 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為一個二維數(shù)組,item相當于取每一個一維數(shù)組,
//item[0]相對于取每一個一維數(shù)組里的第一個值
//所以上面這個each輸出分別為:1 4 7
var obj = { one:1, two:2, three:3, four:4};
$.each(obj, function(key, val) {
alert(obj[key]);
});
//這個each就有更厲害了,能循環(huán)每一個屬性
//輸出結果為:1 2 3 4
這個JQUERY里的核心代碼
復制代碼 代碼如下:
jQuery.prototype.each=function( fn, args ) {
return jQuery.each( this, fn, args );
}
讓我們看一下jQuery提供的each方法的具體實現(xiàn),
jQuery.each(obj,fn,arg)
該方法有三個參數(shù):進行操作的對象obj,進行操作的函數(shù)fn,函數(shù)的參數(shù)args。
讓我們根據(jù)ojb對象進行討論:
1.obj對象是數(shù)組
each方法會對數(shù)組中子元素的逐個進行fn函數(shù)調用,直至調用某個子元素返回的結果為false為止,也就是說,我們可以在提供的fn函數(shù)進行處理,使 之滿足一定條件后就退出each方法調用。當each方法提供了arg參數(shù)時,fn函數(shù)調用傳入的參數(shù)為arg,否則為:子元素索引,子元素本身
2.obj 對象不是數(shù)組
該方法同1的最大區(qū)別是:fn方法會被逐次不考慮返回值的進行進行。換句話說,obj對象的所有屬性都會被fn方法進行調用,即使fn函數(shù)返回false。調用傳入的參數(shù)同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的實現(xiàn)中,可以直接采用this指針引用 數(shù)組或是對象的子元素。這種方式是絕大多數(shù)jQuery所采用的一種實現(xiàn)方式。
還是通過實例來說明吧
先看代碼:
復制代碼 代碼如下:
$("#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實現(xiàn),也可以做了計數(shù)器到最后判斷他的值!
上面的代碼似乎和標題沒什么關系,那么在each里如何實現(xiàn)break與continue 其實看下面還是有關系的…
復制代碼 代碼如下:
$('input').each(function(){
if($(this).val() == ''){
// do something
if(1==1)return false; // 使用return false 來實現(xiàn)跳出循環(huán)。
else return true; // 使用return true 來實現(xiàn)進入下一個循環(huán)。
}
});
jquery里面應該是迭代每一個元素后查看返回的值,判斷是否繼續(xù)迭代下一個元素
原創(chuàng)文章,轉載請注明:同路吧 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為一個二維數(shù)組,item相當于取每一個一維數(shù)組,
//item[0]相對于取每一個一維數(shù)組里的第一個值
//所以上面這個each輸出分別為:1 4 7
var obj = { one:1, two:2, three:3, four:4};
$.each(obj, function(key, val) {
alert(obj[key]);
});
//這個each就有更厲害了,能循環(huán)每一個屬性
//輸出結果為:1 2 3 4
相關文章
jQuery + Flex 通過拖拽方式動態(tài)改變圖片的代碼
功能終于告一段落了,實現(xiàn)了預期的功能。遇到了一個小麻煩,js 會把某些變量( 如果你是通過對象的方式傳遞的,將在傳遞之后丟失類型信息 ,后面*號部分)2011-08-08jQuery實現(xiàn)滾動鼠標放大縮小圖片的方法(附demo源碼下載)
這篇文章主要介紹了jQuery實現(xiàn)滾動鼠標放大縮小圖片的方法,實例分析了jquery mousewheel插件實現(xiàn)鼠標事件響應及頁面元素屬性動態(tài)操作技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2016-03-03Jquery Ajax學習實例4 向WebService發(fā)出請求,返回實體對象的異步調用
Jquery Ajax學習實例4-向WebService發(fā)出請求,返回實體對象的異步調用2010-03-03HTML5+jQuery插件Quicksand實現(xiàn)超酷的星際爭霸2兵種分類展示效果(附demo源碼下載)
這篇文章主要介紹了HTML5+jQuery插件Quicksand實現(xiàn)超酷的星際爭霸2兵種分類展示效果,詳細分析了Quicksand插件的使用及圖片浮動顯示的實現(xiàn)技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2016-05-05使用jQuery實現(xiàn)兩個div中按鈕互換位置的實例代碼
這篇文章主要介紹了使用jQuery實現(xiàn)兩個div中按鈕互換位置的實例代碼,需要的朋友可以參考下2017-09-09跟我一起學寫jQuery插件開發(fā)方法(附完整實例及下載)
jQuery如此流行,各式各樣的jQuery插件也是滿天飛。你有沒有想過把自己的一些常用的JS功能也寫成jQuery插件呢?如果你的答案是肯定的,那么來吧!和我一起學寫jQuery插件吧!2010-04-04jQuery checkbox全選/取消全選實現(xiàn)代碼
用JavaScript使頁面上的一組checkbox全選/取消全選,邏輯很簡單,實現(xiàn)代碼也沒有太難的語法。但使用jQuery實現(xiàn)則更簡單,代碼也很簡潔,精辟!2009-11-11