jQuery each()方法的使用方法


Posted in Javascript onMarch 18, 2010

jQuery和jQuery对象都实现了该方法,对于jQuery对象,只是把each方法简单的进行了委托:把jQuery对象作为第一个参数传递给jQuery的each方法.换句话说:jQuery提供的each方法是对参数一提供的对象的中所有的子元素逐一进行方法调用。而jQuery对象提供的each方法则是对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所采用的一种实现方式。
在jQuery里有一个each方法,用起来非常的爽,不用再像原来那样写for循环,jQuery源码里自己也有很多用到each方法。
其实jQuery里的each方法是通过js里的call方法来实现的。
下面简单介绍一下call方法。
call这个方法很奇妙,其实官方的说明是:“调用一个对象的一个方法,以另一个对象替换当前对象。”网上更多的解释是变换上下文环境,也有说是改变上下文this指针。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
引用网上有一个很经典的例子
Js代码
function add(a,b) 
{ 
alert(a+b); 
} 
function sub(a,b) 
{ 
alert(a-b); 
} 
add.call(sub,3,1);

用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4);
注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。
具体call更深入的就不在这里提了。
下面提一下jQuery的each方法的几种常用的用法
Js代码
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+xml+ajax的无刷新树结构(无css,后台是c#)
Jun 02 Javascript
Javascript仿PHP $_GET获取URL中的参数
May 12 Javascript
javascript arguments使用示例
Dec 16 Javascript
javascript进行四舍五入方法汇总
Dec 16 Javascript
JavaScript实现Java中StringBuffer的方法
Feb 09 Javascript
Jquery 分页插件之Jquery Pagination
Aug 25 Javascript
简要了解jQuery移动web开发的响应式布局设计
Dec 04 Javascript
javascript如何实现360度全景照片问题汇总
Apr 04 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
May 06 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
Aug 13 Javascript
vue如何搭建多页面多系统应用
Jun 17 Javascript
详细分析vue响应式原理
Jun 22 Javascript
jQuery each()小议
Mar 18 #Javascript
jquery ajax执行后台方法
Mar 18 #Javascript
jQuery中与toggleClass等价的程序段 以及未来学习的方向
Mar 18 #Javascript
javascript 验证日期的函数
Mar 18 #Javascript
12个非常有创意的JavaScript小游戏
Mar 18 #Javascript
JQuery 插件模板 制作jquery插件的朋友可以参考下
Mar 17 #Javascript
jquery 简单图片导航插件jquery.imgNav.js
Mar 17 #Javascript
You might like
php开发环境配置记录
2011/01/14 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
阿里对象存储OSS在laravel框架中的使用方法
2019/10/13 PHP
ko knockoutjs动态属性绑定技巧应用
2012/11/14 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
鼠标移入移出事件改变图片的分辨率的两种方法
2013/12/17 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
2014/04/17 Javascript
jQuery中fadeOut()方法用法实例
2014/12/24 Javascript
js+css实现有立体感的按钮式文字竖排菜单效果
2015/09/01 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
2016/11/04 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
React根据宽度自适应高度的示例代码
2017/10/11 Javascript
解析vue中的$mount
2017/12/21 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
ElementUI 修改默认样式的几种办法(小结)
2020/07/29 Javascript
[01:18:36]LGD vs VP Supermajor 败者组决赛 BO3 第一场 6.10
2018/07/04 DOTA
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
利用Pyhton中的requests包进行网页访问测试的方法
2018/12/26 Python
使用python实现多维数据降维操作
2020/02/24 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
Python reques接口测试框架实现代码
2020/07/28 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
德国最大的拼图在线商店:Puzzle.de
2016/12/17 全球购物
Shopee印度尼西亚:东南亚与台湾市场最大电商平台
2018/06/17 全球购物
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
优秀士兵先进事迹
2014/02/06 职场文书
毕业生求职信
2014/06/10 职场文书
计算机专业自荐信
2015/03/05 职场文书
2016年“12.4”法制宣传日活动总结
2016/04/01 职场文书
学者《孟子》名人名言
2019/08/09 职场文书