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 添加/移除CSS类实现代码
Feb 11 Javascript
javascript Array.prototype.slice使用说明
Oct 11 Javascript
解析javascript 浏览器关闭事件
Jul 08 Javascript
javascript右下角弹层及自动隐藏(自己编写)
Nov 20 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
Aug 07 Javascript
自学实现angularjs依赖注入
Dec 20 Javascript
js 动态生成html 触发事件传参字符转义的实例
Feb 14 Javascript
jQuery中on方法使用注意事项详解
Feb 15 Javascript
为你的微信小程序体积瘦身详解
May 20 Javascript
微信小程序之页面跳转和参数传递的实现
Sep 29 Javascript
ES6 async、await的基本使用方法示例
Jun 06 Javascript
vue实现列表拖拽排序的示例代码
Apr 08 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通用检测函数集合
2006/11/25 PHP
新手学PHP之数据库操作详解及乱码解决!
2007/01/02 PHP
php 文件状态缓存带来的问题
2008/12/14 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
js中复制行和删除行的操作实例
2013/06/25 Javascript
基于jquery实现的自动补全功能
2015/03/12 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
javascript宿主对象之window.navigator详解
2016/09/07 Javascript
js实现分页功能
2017/05/24 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
nodejs中express入门和基础知识点学习
2018/09/13 NodeJs
jquery操作select常见方法大全【7种情况】
2019/05/28 jQuery
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
[01:03:33]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
利用python实现周期财务统计可视化
2019/08/25 Python
详解python中eval函数的作用
2019/10/22 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
美国婴儿用品店:Babies”R”Us
2017/10/12 全球购物
酒店工作职员求职简历的自我评价
2013/10/23 职场文书
师范毕业生自我鉴定
2014/01/15 职场文书
大学新闻系应届生求职信
2014/06/02 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
五年级下册复习计划
2015/01/19 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫
Android Gradle 插件自定义Plugin实现注意事项
2022/06/16 Java/Android