jQuery中的each()详细介绍(推荐)


Posted in Javascript onMay 25, 2016

each()方法能使DOM循环结构简洁,不容易出错。each()函数封装了十分强大的遍历功能,使用也很方便,它可以遍历一维数组、多维数组、DOM, JSON 等等

在javaScript开发过程中使用$each可以大大的减轻我们的工作量。

下面提一下each的几种常用的用法

each处理一维数组

var arr1 = [ "aaa", "bbb", "ccc" ]; 
$.each(arr1, function(i,val){ 
alert(i); 
alert(val);
});

alert(i)将输出0,1,2

alert(val)将输出aaa,bbb,ccc

each处理二维数组

var arr2 = [['a', 'aa', 'aaa'], ['b', 'bb', 'bbb'], ['c', 'cc', 'ccc']] 

$.each(arr, function(i, item){ 
alert(i); 
alert(item); 

});

arr2为一个二维数组,item相当于取这二维数组中的每一个数组。

item[0]相对于取每一个一维数组里的第一个值

alert(i)将输出为0,1,2,因为这二维数组含有3个数组元素

alert(item)将输出为 ['a', 'aa', 'aaa'],['b', 'bb', 'bbb'],['c', 'cc', 'ccc']

对此二位数组的处理稍作变更之后

var arr = [['a', 'aa', 'aaa'], ['b', 'bb', 'bbb'], ['c', 'cc', 'ccc']] 
$.each(arr, function(i, item){ 

$.each(item,function(j,val){


 alert(j);


alert(val);
 }); 
});

alert(j)将输出为0,1,2,0,1,2,0,1,2

alert(val)将输出为a,aa,aaa,b,bb,bbb,c,cc,ccc

each处理json数据,这个each就有更厉害了,能循环每一个属性

var obj = { one:1, two:2, three:3}; 
each(obj, function(key, val) { 

alert(key); 

alert(val); 

});

这里alert(key)将输出one two three

alert(val)将输出one,1,two,2,three,3

这边为何key不是数字而是属性呢,因为json格式内是一组无序的属性-值,既然无序,又何来数字呢。

而这个val等同于obj[key]

ecah处理dom元素,此处以一个input表单元素作为例子。

如果你dom中有一段这样的代码

<input name="aaa" type="hidden" value="111" />
<input name="bbb" type="hidden" value="222" />
<input name="ccc" type="hidden" value="333" />
<input name="ddd" type="hidden" value="444"/>

然后你使用each如下

$.each($("input:hidden"), function(i,val){ 
alert(val);
alert(i);
alert(val.name);
alert(val.value); 
});

那么,alert(val)将输出[object HTMLInputElement],因为它是一个表单元素。

alert(i)将输出为0,1,2,3

alert(val.name);将输出aaa,bbb,ccc,ddd,如果使用this.name将输出同样的结果

alert(val.value); 将输出111,222,333,444,如果使用this.value将输出同样的结果

如果将以上面一段代码改变成如下的形式

$("input:hidden").each(function(i,val){
alert(i);
alert(val.name);
alert(val.value); 
});

可以看到,输出的结果是一样的,至于两种写法究竟区别在哪,我也还不知。此改变运用到上面几段数组的操作也会输出同样的结果。

这样,几个例子的实际结果已经得到答案。接着再继续往下研究,总不能知其然不知其所以然。

从以上的例子中可知jQuery和jQuery对象都实现了该方法,对于jQuery对象,只是把each方法简单的进行了委托:把jQuery对象作为第一个参数传递给jQuery的each方法。

看下jQuery中的each实现(网络摘抄)

function (object, callback, args) {
//该方法有三个参数:进行操作的对象obj,进行操作的函数fn,函数的参数args
var name, i = 0,length = object.length;
if (args) {
if (length == undefined) {
for (name in object) {
if (callback.apply(object[name], args) === false) {
break;
}
}
} else {
for (; i < length;) {
if (callback.apply(object[i++], args) === false) {
break;
}
}
}
} else {
if (length == undefined) {
for (name in object) {
if (callback.call(object[name], name, object[name]) === false) {
break;
}
}
} else {
for (var value = object[0]; i < length && callback.call(value, i, value) !== false; value = object[++i]) {}
/*object[0]取得jQuery对象中的第一个DOM元素,通过for循环,
得到遍历整个jQuery对象中对应的每个DOM元素,通过 callback.call( value,i,value);
将callback的this对象指向value对象,并且传递两个参数,i表示索引值,value表示DOM元素;
其中callback是类似于 function(index, elem) { ... } 的方法。
所以就得到 $("...").each(function(index, elem){ ... });
*/
}
}
return object;
}

jquery会自动根据传入的元素进行判断,然后在根据判断结果采取apply还是call方法的处理。在fn的实现中,可以直接采用this指针引用数组或是对象的子元素。

1.obj对象是数组

each方法会对数组中子元素的逐个进行fn函数调用,直至调用某个子元素返回的结果为false为止,也就是说,我们可以在提供的fn函数进行处理,使之满足一定条件后就退出each方法调用。当each方法提供了arg参数时,fn函数调用传入的参数为arg,否则为:子元素索引,子元素本身

2.obj 对象不是数组

该方法同1的最大区别是:fn方法会被逐次不考虑返回值的进行进行。换句话说,obj对象的所有属性都会被fn方法进行调用,即使fn函数返回false。调用传入的参数同1类似。

Javascript 相关文章推荐
Extjs学习笔记之六 面版
Jan 08 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
Oct 11 Javascript
JavaScript中使用concat()方法拼接字符串的教程
Jun 06 Javascript
js实现仿爱微网两级导航菜单效果代码
Aug 31 Javascript
javascript每日必学之封装
Feb 23 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
Sep 05 Javascript
Angular的模块化(代码分享)
Dec 26 Javascript
jQuery插件form-validation-engine正则表达式操作示例
Feb 09 Javascript
使用 jQuery 实现表单验证功能
Jul 05 jQuery
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
Aug 16 Javascript
JS使用new操作符创建对象的方法分析
May 30 Javascript
小程序实现图片移动缩放效果
May 26 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
May 25 #Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
May 25 #Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
May 25 #Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
May 25 #Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
May 25 #Javascript
jQuery获取复选框被选中数量及判断选择值的方法详解
May 25 #Javascript
js提交form表单,并传递参数的实现方法
May 25 #Javascript
You might like
PHP中的串行化变量和序列化对象
2006/09/05 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
2017/02/24 PHP
php自定义截取中文字符串-utf8版
2017/02/27 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
PHP操作路由器实现方法示例
2019/04/27 PHP
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
jquery随意添加移除html的实现代码
2011/06/21 Javascript
Moment.js 不容错过的超棒Javascript日期处理类库
2012/04/15 Javascript
javascript的原生方法获取数组中的最大(最小)值
2012/12/19 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
详解基于angular路由的requireJs按需加载js
2017/01/20 Javascript
微信小程序 UI与容器组件总结
2017/02/21 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
2019/08/08 Javascript
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python中的XML库4Suite Server的介绍
2015/04/14 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
python WindowsError的错误代码详解
2017/07/23 Python
python在每个字符后添加空格的实例
2018/05/07 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
体育纪念品、亲笔签名的体育收藏品:Steiner Sports
2020/07/31 全球购物
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
影视艺术学院毕业生自荐信
2013/11/13 职场文书
班主任工作年限证明
2014/01/12 职场文书
电力安全事故反思
2014/04/27 职场文书
公务员诚信承诺书
2014/05/26 职场文书
运动会口号16字
2014/06/07 职场文书
小学运动会开幕词
2015/01/28 职场文书