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 相关文章推荐
JS input 数字验证代码
Jul 30 Javascript
ajax请求乱码的解决方法(中文乱码)
Apr 10 Javascript
jQuery提交多个表单的小技巧
Jul 27 Javascript
javascript自定义函数参数传递为字符串格式
Jul 29 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
Dec 22 Javascript
jquery中live()方法和bind()方法区别分析
Jun 23 Javascript
学习Bootstrap滚动监听 附调用方法
Jul 02 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
Jul 07 Javascript
EditPlus中的正则表达式 实战(4)
Dec 15 Javascript
react开发教程之React 组件之间的通信方式
Aug 12 Javascript
在vue项目中,使用axios跨域处理
Mar 07 Javascript
基于vue实现图片验证码倒计时60s功能
Dec 10 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
在PHP中使用灵巧的体系结构
2006/10/09 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
PHP连接sftp并下载文件的方法教程
2018/08/26 PHP
JQuery Ajax 跨域访问的解决方案
2010/03/12 Javascript
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
2013/08/08 Javascript
jQuery extend 的简单实例
2013/09/18 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
2015/06/16 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
vue实现条件判断动态绑定样式的方法
2018/09/29 Javascript
django使用channels2.x实现实时通讯
2018/11/28 Javascript
详解JavaScript函数callee、call、apply的区别
2019/03/08 Javascript
JS实现容器模块左右拖动效果
2020/01/14 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
2020/02/07 Javascript
Python匹配中文的正则表达式
2016/05/11 Python
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
Python3.5 处理文本txt,删除不需要的行方法
2018/12/10 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
Python进行特征提取的示例代码
2020/10/15 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
2020/11/06 Python
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
怎样声明接口
2014/09/19 面试题
广告设计应届生求职信
2014/03/01 职场文书
爱心活动计划书
2014/04/26 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
2015年母亲节寄语
2015/03/23 职场文书
小鞋子观后感
2015/06/05 职场文书
汽车销售员工作总结
2015/08/12 职场文书