JQuery中each()的使用方法说明


Posted in Javascript onAugust 19, 2010

each()函数是基本上所有的框架都提供了的一个工具类函数,通过它,你可以遍历对象、数组的属性值并进行处理。jQuery和jQuery对象都实 现了该方法,对于jQuery对象,只是把each方法简单的进行了委托:把jQuery对象作为第一个参数传递给jQuery的each方法.换句话 说:jQuery提供的each方法是对参数一提供的对象的中所有的子元素逐一进行方法调用。而jQuery对象提供的each方法则是对jQuery内 部的子元素进行逐个调用。

each函数根据参数的类型实现的效果不完全一致:

1、遍历对象(有附加参数)

$.each(Object, function(p1, p2) {

     this;       //这里的this指向每次遍历中Object的当前属性值

     p1; p2;     //访问附加参数

}, ['参数1', '参数2']);

2、遍历数组(有附件参数)

$.each(Array, function(p1, p2){

     this;       //这里的this指向每次遍历中Array的当前元素

     p1; p2;     //访问附加参数

}, ['参数1', '参数2']);

3、遍历对象(没有附加参数)

$.each(Object, function(name, value) {

     this;      //this指向当前属性的值

     name;      //name表示Object当前属性的名称

     value;     //value表示Object当前属性的值

});

4、遍历数组(没有附加参数)

$.each(Array, function(i, value) {

     this;      //this指向当前元素

     i;         //i表示Array当前下标

     value;     //value表示Array当前元素

});

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

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

JQuery中的each函数在1.3.2的官方文档中的描述如下:

each(callback)

以每一个匹配的元素作为上下文来执行一个函数。

意味着,每次执行传递进来的函数时,函数中的this关键字都指向一个不同的DOM元素(每次都是一个不同的匹配元素)。而且,在每次执行函数时,都会给函数传递一个表示作为执行环境的元素在匹配的元素集合中所处位置的数字值作为参数(从零开始的整形)。返回 'false' 将停止循环 (就像在普通的循环中使用 'break')。返回 'true' 跳至下一个循环(就像在普通的循环中使用'continue')。

而后面的callback 则是回调函数,指示遍历元素的时候应该赋予的操作。先看下面的一个简单的例子:
迭代两个图像,并设置它们的 src 属性。注意:此处 this 指代的是 DOM 对象而非 jQuery 对象。

HTML 代码:

<img/><img/>jQuery 代码: 

$("img").each(function(i){ 

this.src = "test" + i + ".jpg"; 

});

结果:[ <img src="test0.jpg" />, <img src="test1.jpg" /> ]
当然,在遍历元素的时候,jquery是允许自定义跳出的,请看示例代码:你可以使用 'return' 来提前跳出 each() 循环。
HTML 代码:
<button>Change colors</button> 

<span></span> 

<div></div> 

<div></div> 

<div></div> 

<div></div> 

<div id="stop">Stop here</div> 

<div></div> 

<div></div> 

<div></div>

jQuery 代码:
$("button").click(function(){ 

$("div").each(function(index,domEle){ 

$(domEle).css("backgroundColor","wheat"); 

if($(this).is("#stop")){ 

$("span").text("在div块为#"+index+"的地方停止。"); 

return false; 

} 

});

或者这么写:
$("button").click(function(){ 

$("div").each(function(index){ 

$(this).css("backgroundColor","wheat"); 

if($(this).is("#stop")){ 

$("span").text("在div块为#"+index+"的地方停止。"); 

return false; 

} 

});

图解:
JQuery中each()的使用方法说明

each() 方法规定为每个匹配元素规定运行的函数。

提示:返回 false 可用于及早停止循环。
语法
$(selector).each(function(index,element))参数 描述
function(index,element) 必需。为每个匹配元素规定运行的函数。
•index - 选择器的 index 位置
•element - 当前的元素(也可使用 "this" 选择器

实例
输出每个 li 元素的文本:

$("button").click(function(){ 

$("li").each(function(){ 

alert($(this).text()) 

}); 

});

实例
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指针引用数组或是对象的子元素。

那怎么跳出each呢
jquery再遍历选定的对象时候用each比较方便。有种应用是找到里面符合条件的对象后,要跳出这个循环。
javascript的跳出循环一般用break.
同事遇到这个问题,下意识 的用了break,想跳出这个循环。结果报错
SyntaxError: unlabeled break must be inside loop or switch
经查,应该用一个
在回调函数里return false即可,大多数jq的方法都是如此的

返回 'false' 将停止循环 (就像在普通的循环中使用 'break')。 

返回 'true' 跳至下一个循环(就像在普通的循环中使用'continue')。
Javascript 相关文章推荐
javascript五图轮播切换实用版
Aug 17 Javascript
Visual Studio中js调试的方法图解
Jun 30 Javascript
jQuery动画特效实例教程
Aug 29 Javascript
浅谈js中变量初始化
Feb 03 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
Jun 13 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
Sep 17 Javascript
AngularJS实现DOM元素的显示与隐藏功能
Nov 22 Javascript
Node调用Java的示例代码
Sep 20 Javascript
node.js学习之断言assert的使用示例
Sep 28 Javascript
基于jquery的on和click的区别详解
Jan 15 jQuery
vue :src 文件路径错误问题的解决方法
May 15 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
Oct 07 Javascript
jquery获取input的value问题说明
Aug 19 #Javascript
JavaScript开发规范要求(规范化代码)
Aug 16 #Javascript
JavaScript学习历程和心得小结
Aug 16 #Javascript
javascript中的prototype属性使用说明(函数功能扩展)
Aug 16 #Javascript
javascript下高性能字符串连接StringBuffer类
Aug 16 #Javascript
子窗口、父窗口和Silverlight之间的相互调用
Aug 16 #Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
Aug 16 #Javascript
You might like
无数据库的详细域名查询程序PHP版(5)
2006/10/09 PHP
用PHP+java实现自动新闻滚动窗口
2006/10/09 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
Jquery 常用方法经典总结
2010/01/28 Javascript
JS无限树状列表实现代码
2011/01/11 Javascript
编写针对IE的JS代码两种编写方法
2013/01/30 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
js实现简单的左右两边固定广告效果实例
2015/04/10 Javascript
JS使用parseInt解析数字实现求和的方法
2015/08/05 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
Node.js搭建WEB服务器的示例代码
2018/08/15 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
vue使用svg文件补充-svg放大缩小操作(使用d3.js)
2020/09/22 Javascript
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python 操作MySQL详解及实例
2017/04/30 Python
Python实现获取命令行输出结果的方法
2017/06/10 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
2017/07/10 Python
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
2020/02/15 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
python request 模块详细介绍
2020/11/10 Python
CSS实现进度条和订单进度条的示例
2020/11/05 HTML / CSS
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
薇姿法国官网:Vichy法国
2021/01/28 全球购物
求职简历中的自我评价分享
2013/12/08 职场文书
大学应届生的自我评价
2014/03/06 职场文书
毕业生自荐信格式
2014/03/07 职场文书
服务标语大全
2014/06/18 职场文书
教师自查自纠材料
2014/10/14 职场文书
2015国庆节66周年演讲稿
2015/03/20 职场文书