JQuery中each()的使⽤⽅法说明
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 代码:jquery选择器和css选择器的区别
复制代码代码如下:
$("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')。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论