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 相关文章推荐
js动态在form上插入enctype=multipart/form-data的问题
May 24 Javascript
告诉你什么是javascript的回调函数
Sep 04 Javascript
jQuery实现查找最近父节点的方法
Jun 23 Javascript
利用Javascript仿Excel的数据透视分析功能
Sep 07 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
Mar 30 Javascript
使用vue如何构建一个自动建站项目
Feb 05 Javascript
浅谈Vue render函数在ElementUi中的应用
Sep 06 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
Apr 25 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
Sep 09 Javascript
Node.js API详解之 repl模块用法实例分析
May 25 Javascript
Vue + iView实现Excel上传功能的完整代码
Jun 22 Vue.js
vue如何使用模拟的json数据查看效果
Mar 31 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
PHP+javascript模拟Matrix画面
2006/10/09 PHP
PHP 5.0对象模型深度探索之类的静态成员
2008/03/27 PHP
php 变量未定义等错误的解决方法
2011/01/12 PHP
VIM中设置php自动缩进为4个空格的方法详解
2013/06/14 PHP
php curl模拟post提交数据示例
2013/12/31 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
在Vant的基础上封装下拉日期控件的代码示例
2018/12/05 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
pygame实现弹力球及其变速效果
2017/07/03 Python
Python中int()函数的用法浅析
2017/10/17 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
18个Python脚本可加速你的编码速度(提示和技巧)
2019/10/17 Python
python创建子类的方法分析
2019/11/28 Python
python随机生成库faker库api实例详解
2019/11/28 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
Java程序员面试90题
2013/10/19 面试题
毕业生的求职信范文分享
2013/12/04 职场文书
小区停车场管理制度
2014/01/27 职场文书
关于廉洁的广播稿
2014/01/30 职场文书
青春演讲稿范文
2014/05/08 职场文书
长城导游词400字
2015/01/30 职场文书
婚宴邀请函
2015/01/30 职场文书
校长个人总结
2015/03/03 职场文书
安全员岗位职责范本
2015/04/11 职场文书
博物馆观后感
2015/06/05 职场文书
严以用权学习心得体会
2016/01/12 职场文书
导游词创作书写原则以及开场白技巧怎么学?
2019/09/25 职场文书
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
一文搞懂Redis中String数据类型
2022/04/03 Redis