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 相关文章推荐
简介JavaScript中Math.cos()余弦方法的使用
Jun 15 Javascript
在 Express 中使用模板引擎
Dec 10 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
Jan 17 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
Sep 27 Javascript
JS去除重复并统计数量的实现方法
Dec 15 Javascript
清除输入框内的空格
Dec 21 Javascript
新手vue构建单页面应用实例代码
Sep 18 Javascript
JavaScript实现职责链模式概述
Jan 25 Javascript
jQuery发请求传输中文参数乱码问题的解决方案
May 22 jQuery
基于VUE实现的九宫格抽奖功能
Sep 30 Javascript
JS实现图片切换效果
Nov 17 Javascript
javascript实现计算器功能详解流程
Nov 01 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上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
PHP中for与foreach的区别分析
2011/03/09 PHP
PHP的SQL注入过程分析
2012/01/06 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
document.compatMode介绍
2009/05/21 Javascript
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
2011/12/31 Javascript
优化Jquery,提升网页加载速度
2013/11/14 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
最后说说Vue2 SSR 的 Cookies 问题
2018/05/25 Javascript
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
vue+element搭建后台小总结 el-dropdown下拉功能
2020/04/10 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
python使用Tkinter显示网络图片的方法
2015/04/24 Python
Python 读取指定文件夹下的所有图像方法
2018/04/27 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
2020/12/07 Python
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
国际商务专业学生个人的自我评价
2013/09/28 职场文书
安全员岗位职责
2013/11/11 职场文书
林肯就职演讲稿
2014/05/19 职场文书
见习报告的格式
2014/11/04 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
新教师个人总结
2015/02/06 职场文书
同事欢送会致辞
2015/07/31 职场文书
2016猴年开门红标语口号
2015/12/26 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
python实现剪贴板的操作
2021/07/01 Python
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers