JQuery中each()的使用方法说明-阿里云开发者社区

开发者社区> ke_ry> 正文

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

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

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

一、jquery

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方法的几种常用的用法

 

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


二、jquery对象

each(callback) 

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

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

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

复制代码
<img></img/>

$("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;
        }
    })
}
复制代码
图解:


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')。 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云飞天计划ECS使用体验
这是一篇关于阿里云ECS服务器使用的感悟
15 0
Cloud for Customer的主页加载逻辑
Cloud for Customer的主页加载逻辑
3 0
SAP Cloud for Customer里Sales Order和Sales Quote的建模方式
SAP Cloud for Customer里Sales Order和Sales Quote的建模方式
6 0
云ESC使用体验
云服务器使用流程,用云服务器搭建网站
7 0
Angular和SAP C4C的事件处理队列
Angular和SAP C4C的事件处理队列
5 0
SAP Cloud for Customer的前端框架是如何基于SAP UI5框架开发的
SAP Cloud for Customer的前端框架是如何基于SAP UI5框架开发的
3 0
行数据上加一个version版本字段,可以有效防止数据重复更新
行数据上加一个version版本字段,可以有效防止数据重复更新
4 0
飞天计划使我在ecs服务器上遨游
因为最近有个搭建博客的需求,了解了在github上搭建的方法后感觉响应速度有点慢,最后选择购买服务器进行个人博客的搭建。
17 0
SAP Cloud for Customer Cloud Application Studio的一些使用技巧(持续更新)
SAP Cloud for Customer Cloud Application Studio的一些使用技巧(持续更新)
3 0
阿里云ECS的使用体验及其收获
通过对阿里云云服务器的学习,掌握了Linux命令的基本使用,包括基本软件的安装,自己写的项目上线部署运行,收获良多,感谢阿里云的“飞天加速计划——高校学生在家实践”。
14 0
+关注
ke_ry
开源技术专家
443
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载