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 相关文章推荐
从数据结构分析看:用for each...in 比 for...in 要快些
Apr 17 Javascript
javascript中typeof的使用示例
Dec 19 Javascript
jQuery瀑布流插件Wookmark使用实例
Apr 02 Javascript
JS中使用sort结合localeCompare实现中文排序实例
Jul 23 Javascript
javascript转换静态图片,增加粒子动画效果
May 28 Javascript
jQuery时间日期三级联动(推荐)
Nov 27 Javascript
javascript设计模式之单体模式学习笔记
Feb 15 Javascript
iview table高度动态设置方法
Mar 14 Javascript
jquery.pager.js实现分页效果
Jul 29 jQuery
浅谈Layui的eleTree树式选择器使用方法
Sep 25 Javascript
JS Generator 函数的含义与用法实例总结
Apr 08 Javascript
vue3.0中友好使用antdv示例详解
Jan 05 Vue.js
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
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
jquery ajax 登录验证实现代码
2009/09/23 Javascript
Javascript和Ajax中文乱码吐血版解决方案
2009/12/21 Javascript
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
javascript中数组的冒泡排序使用示例
2013/12/18 Javascript
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
JS延时器提示框的应用实例代码解析
2016/04/27 Javascript
移动端使用localStorage缓存Js和css文的方法(web开发)
2016/09/20 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
jqueryUI tab标签页代码分享
2017/10/09 jQuery
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
jQuery Dom元素操作技巧
2018/02/04 jQuery
p5.js实现斐波那契螺旋的示例代码
2018/03/22 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
[00:44]2016完美“圣”典 风云人物:Mikasa宣传片
2016/12/07 DOTA
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
python计算N天之后日期的方法
2015/03/31 Python
深入Python函数编程的一些特性
2015/04/13 Python
python的移位操作实现详解
2019/08/21 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
英国豪华针织品牌John Smedley的在线销售商:The Outlet by John Smedley
2018/04/08 全球购物
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
设置器与访问器的定义以及各自特点
2016/01/08 面试题
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
激励口号大全
2014/06/17 职场文书
药店收银员岗位职责
2015/04/07 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle