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 appendChild,innerHTML,join性能比较代码
Aug 29 Javascript
再谈javascript图片预加载技术(详细演示)
Mar 12 Javascript
jQuery学习笔记之控制页面实现代码
Feb 27 Javascript
Javascript中的关键字和保留字整理
Oct 16 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
Dec 22 Javascript
jQuery中的each()详细介绍(推荐)
May 25 Javascript
微信小程序的动画效果详解
Jan 18 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
Nov 29 Javascript
Vue使用.sync 实现父子组件的双向绑定数据问题
Apr 04 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
May 06 Javascript
Vue将页面导出为图片或者PDF
Aug 17 Javascript
微信小程序 组件的外部样式externalClasses使用详解
Sep 06 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日期控制类实例
2014/12/09 PHP
javascript作用域容易记错的两个地方分析
2012/06/22 Javascript
得到jQuery detach()后节点中的某个值实现代码
2013/02/05 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
原生js通过一行代码实现简易轮播图
2019/06/05 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
python入门基础之用户输入与模块初认识
2016/11/14 Python
Python2.7读取PDF文件的方法示例
2017/07/13 Python
Python编程之Re模块下的函数介绍
2017/10/28 Python
python3大文件解压和基本操作
2017/12/15 Python
Python线程创建和终止实例代码
2018/01/20 Python
python中的set实现不重复的排序原理
2018/01/24 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
python读取指定字节长度的文本方法
2019/08/27 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
解决pytorch 的state_dict()拷贝问题
2021/03/03 Python
美国存储和组织商店:The Container Store
2017/08/16 全球购物
String这个类型的class为何定义成final?
2012/11/13 面试题
编写strcpy函数
2014/06/24 面试题
校园活动策划书范文
2014/01/10 职场文书
元旦晚会感言
2014/03/12 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
培训通知书模板
2015/04/17 职场文书
幼儿园重阳节活动总结
2015/05/05 职场文书
论文答辩开场白大全
2015/05/27 职场文书
教师节主持词开场白
2015/05/29 职场文书
家装电话营销开场白
2015/05/29 职场文书
建议书的格式及范文
2015/09/14 职场文书
企业文化学习心得体会
2016/01/21 职场文书
PHP设计模式(观察者模式)
2021/07/07 PHP
Python if else条件语句形式详解
2022/03/24 Python