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 相关文章推荐
鼠标图片振动代码
Jul 06 Javascript
jQuery使用手册之三 CSS操作
Mar 24 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
Feb 14 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
Aug 09 Javascript
15个jquery常用方法、小技巧分享
Jan 13 Javascript
jQuery File Upload文件上传插件使用详解
Dec 06 Javascript
jQuery如何跳转到另一个网页 就这么简单
Dec 28 Javascript
vue事件修饰符和按键修饰符用法总结
Jul 25 Javascript
基于jquery实现左右上下移动效果
May 02 jQuery
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
May 31 jQuery
jQuery中常用动画效果函数知识点整理
Aug 19 jQuery
详解vue的数据劫持以及操作数组的坑
Apr 18 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
PHP语法速查表
2006/12/06 PHP
批量修改RAR文件注释的php代码
2010/11/20 PHP
PHP多维数组转一维数组的简单实现方法
2015/12/23 PHP
PHP递归算法的简单实例
2019/02/28 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
js 对象是否存在判断
2009/07/15 Javascript
为javascript添加String.Format方法
2020/08/11 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
angular中使用路由和$location切换视图
2015/01/23 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
AngularJS中ng-options实现下拉列表的数据绑定方法
2018/08/13 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
把MySQL表结构映射为Python中的对象的教程
2015/04/07 Python
python实现的简单文本类游戏实例
2015/04/28 Python
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
轻量级的Web框架Flask 中模块化应用的实现
2017/09/11 Python
Django设置Postgresql的操作
2020/05/14 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
Python脚本实现Zabbix多行日志监控过程解析
2020/08/26 Python
帕克纽约:PARKER NY
2018/12/09 全球购物
审计主管岗位职责
2014/01/31 职场文书
2014五一国际劳动节活动总结范文
2014/04/14 职场文书
语文教育专业求职信
2014/06/28 职场文书
办理房产过户的委托书
2014/09/14 职场文书
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
MySQL分库分表详情
2021/09/25 MySQL