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跨域和ajax 跨域问题的实现思路
Sep 05 Javascript
jquery键盘事件介绍
Jan 31 Javascript
Prototype源码浅析 Enumerable部分之each方法
Jan 16 Javascript
Google的跟踪代码 动态加载js代码方法应用
Nov 12 Javascript
js使下拉列表框可编辑不止是选择
Dec 12 Javascript
jquery教程ajax请求json数据示例
Jan 13 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
Jan 14 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
Mar 04 Javascript
js 实现数值的千分位及保存小数方法(推荐)
Aug 01 Javascript
JavaScript 总结几个提高性能知识点(推荐)
Feb 20 Javascript
bootstrap实现嵌套模态框的实例代码
Jan 10 Javascript
Vue中添加滚动事件设置的方法详解
Sep 14 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加密解密的代码
2006/10/09 PHP
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
JQuery学习笔录 简单的JQuery
2012/04/09 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
jQuery EasyUI tree增加搜索功能的实现方法
2017/04/27 jQuery
很棒的vue弹窗组件
2017/05/24 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
Vue源码解读之Component组件注册的实现
2018/08/24 Javascript
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
javascript局部自定义鼠标右键菜单
2020/12/08 Javascript
初步解析Python下的多进程编程
2015/04/28 Python
python实现简单五子棋游戏
2019/06/18 Python
PYQT5实现控制台显示功能的方法
2019/06/25 Python
python画图把时间作为横坐标的方法
2019/07/07 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
pytorch数据预处理错误的解决
2020/02/20 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
应届生学校辅导员求职信
2013/11/07 职场文书
演讲稿怎么写才完美
2014/01/02 职场文书
DIY手工制作经营店创业计划书
2014/02/01 职场文书
应届生简历自我评价
2015/03/11 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
大学生就业意向书
2015/05/11 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
深入浅析Django MTV模式
2021/09/04 Python
HTML基础详解(上)
2021/10/16 HTML / CSS
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL
Python实现双向链表基本操作
2022/05/25 Python
win10如何快速切换窗口 win10切换窗口快捷键分享
2022/07/23 数码科技