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 相关文章推荐
一些实用的jQuery代码片段收集
Jul 12 Javascript
javascript动画浅析
Aug 30 Javascript
给js文件传参数(详解)
Jul 13 Javascript
javascript检测是否联网的实现代码
Sep 28 Javascript
jQuery中extend函数详解
Jul 13 Javascript
javascript实现树形菜单的方法
Jul 17 Javascript
快速学习AngularJs HTTP响应拦截器
Dec 31 Javascript
关于JavaScript作用域你想知道的一切
Feb 04 Javascript
一步步教大家编写酷炫的导航栏js+css实现
Mar 14 Javascript
jquery选择器中的空格与大于号&gt;、加号+与波浪号~的区别介绍
Jun 24 Javascript
Vue响应式添加、修改数组和对象的值
Mar 20 Javascript
layui 实现加载动画以及非真实加载进度的方法
Sep 23 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/10/09 PHP
一个好用的分页函数
2006/11/16 PHP
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
php绘图中显示不出图片的原因及解决
2014/03/05 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
2016/07/25 PHP
如何在PHP中使用数组
2020/06/09 PHP
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
详解jQuery插件开发方式
2016/11/22 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
使用Angular CLI生成 Angular 5项目教程详解
2018/03/18 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
layui lay-verify form表单自定义验证规则详解
2019/09/18 Javascript
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
django中related_name的用法说明
2020/05/20 Python
谈谈python垃圾回收机制
2020/09/27 Python
详解CSS3中字体平滑处理和抗锯齿渲染
2017/03/29 HTML / CSS
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
Ajxa常见问题都有哪些
2014/03/26 面试题
银行服务感言
2014/03/01 职场文书
高中家长寄语
2014/04/02 职场文书
家长给学校的建议书
2014/05/15 职场文书
个人债务授权委托书
2014/10/17 职场文书
springboot 自定义配置 解决Boolean属性不生效
2022/03/18 Java/Android
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL