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 相关文章推荐
Prototype使用指南之array.js
Jan 10 Javascript
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
Jun 04 Javascript
Fastest way to build an HTML string(拼装html字符串的最快方法)
Aug 20 Javascript
jquery each的几种常用的使用方法示例
Jan 21 Javascript
js如何判断用户是否是用微信浏览器
Jun 05 Javascript
js字符串引用的两种方式(必看)
Sep 18 Javascript
JavaScript实现隐藏省略文字效果的方法
Apr 27 Javascript
vue2实现可复用的轮播图carousel组件详解
Nov 27 Javascript
BootStrap自定义popover,点击区域隐藏功能的实现
Jan 23 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
Jul 12 Javascript
深入Node TCP模块的理解
Mar 13 Javascript
google广告之另类js调用实现代码
Aug 22 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中使用Oracle数据库(6)
2006/10/09 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
PHP生成指定范围内的N个不重复的随机数
2019/03/18 PHP
Aster vs KG BO3 第三场2.18
2021/03/10 DOTA
javascript hashtable 修正版 下载
2010/12/30 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
利用js编写响应式侧边栏
2016/09/17 Javascript
bootstrap table实现单击单元格可编辑功能
2017/03/28 Javascript
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
20行JS代码实现粘贴板复制功能
2018/02/06 Javascript
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
nodejs require js文件入口,在package.json中指定默认入口main方法
2018/10/10 NodeJs
Vue.js样式动态绑定实现小结
2019/01/24 Javascript
vue从一个页面跳转到另一个页面并携带参数的解决方法
2019/08/12 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
Pyhton中防止SQL注入的方法
2015/02/05 Python
Python中的Classes和Metaclasses详解
2015/04/02 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
python面试题小结附答案实例代码
2019/04/11 Python
自定义django admin model表单提交的例子
2019/08/23 Python
Python 图像对比度增强的几种方法(小结)
2019/09/25 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
Python如何急速下载第三方库详解
2020/11/02 Python
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
学生思想表现的评语
2014/01/30 职场文书
《走一步再走一步》教学反思
2014/02/15 职场文书
最美孝心少年事迹材料
2014/08/15 职场文书
Oracle表空间与权限的深入讲解
2021/11/17 Oracle