jquery里的each使用方法详解


Posted in Javascript onDecember 22, 2010

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
Javascript 相关文章推荐
Javascript图像处理思路及实现代码
Dec 25 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
Apr 26 Javascript
JavaScript操作HTML DOM节点的基础教程
Mar 11 Javascript
bootstrap模态框垂直居中效果
Dec 03 Javascript
JavaScript中闭包的详解
Apr 01 Javascript
Vue中android4.4不兼容问题的解决方法
Sep 04 Javascript
Vuex mutitons和actions初使用详解
Mar 04 Javascript
利用原生JavaScript实现造日历轮子实例代码
May 08 Javascript
js如何实现元素曝光上报
Aug 07 Javascript
Nuxt页面级缓存的实现
Mar 09 Javascript
详解JS预解析原理
Jun 16 Javascript
JS的时间格式化和时间戳转换函数示例详解
Jul 27 Javascript
jQuery学习笔记之jQuery的动画
Dec 22 #Javascript
jQuery学习笔记之jQuery的事件
Dec 22 #Javascript
jQuery学习笔记之jQuery的DOM操作
Dec 22 #Javascript
jQuery学习笔记之jQuery选择器的使用
Dec 22 #Javascript
jQuery学习笔记之DOM对象和jQuery对象
Dec 22 #Javascript
jQuery学习笔记之Helloworld
Dec 22 #Javascript
用Jquery实现多级下拉框无刷新的联动
Dec 22 #Javascript
You might like
如何提高MYSQL数据库的查询统计速度 select 索引应用
2007/04/11 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
JS获得浏览器版本和操作系统版本的例子
2014/05/13 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
基于JavaScript实现鼠标箭头移动图片跟着移动
2016/08/30 Javascript
jQuery中DOM节点删除之empty与remove
2017/01/20 Javascript
JS查找英文文章中出现频率最高的单词
2017/03/20 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
javascript开发实现贪吃蛇游戏
2020/07/31 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
跟老齐学Python之玩转字符串(2)
2014/09/14 Python
python PIL模块与随机生成中文验证码
2016/02/27 Python
使用Django和Python创建Json response的方法
2018/03/26 Python
Python变量赋值的秘密分享
2018/04/03 Python
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
美国最好的葡萄酒网上商店:Wine Library
2019/11/02 全球购物
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
会计实习自我鉴定
2013/12/04 职场文书
行政人事岗位职责
2014/03/17 职场文书
趣味运动会策划方案
2014/06/02 职场文书
交心谈心活动总结
2015/05/11 职场文书
2017公司年会主持人开幕词
2016/03/04 职场文书
毕业生的自我鉴定表范文
2019/05/16 职场文书
Python 实现Mac 屏幕截图详解
2021/10/05 Python