jQuery each()方法的使用方法

时间:2016.04.19 发布人:1wusuozhi

jQuery each()方法的使用方法

已解决问题

谷歌1wusuozhi用户在2016.04.19提交了关于“天坛jQuery each()方法的使用方法”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-09-16T06:53:56。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,感谢你,我会记得你对我的好的 !

希望以下的回答,能够帮助你。

第1个回答

用户名:笑熬糨糊o来自8o  

jQuery和jQuery对象都实现了该方法,对于jQuery对象,只是把each方法简单的进行了委托:把jQuery对象作为第一个参数传递给jQuery的each方法.换句话说:jQuer问答y提供的each方法是对织效大结非参数一提供的对象的中所有的子元素逐一进行方法调用。而jQuery对象提供的each方法则是对jQuery**的大为众到总将子元素进行逐个调用。
复制代码代码如下:
jQuery.prototype.each李热材系值=function(fn,args){
retur粮极食配语承分自njQuery.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=fu青让不专落展高故升唱nction(obj,fn,args){
if(args){
if(obj念批接细计纸比.length==undefined){
for(variinobj)
fn.apply(obj,args);
}e的米压营元称金线散lse{
for(vari=0,ol=obj.length;i<ol;i++){
if(fn.ap研侵治工怕真距整再也玉ply(obj,a向关转比主rgs)===false)
bre**;

}

}
}else{
if(obj.length==undefined术色盾列权格右){
for(variinobj)
***.call(obj,i,obj);
}else{
for(vari=0,ol=obj.length,val=obj[0];i<ol&&***.call(val,i,val)!==false;val=obj[++i]){}

}
}
returnobj;
}

需要特别注意的是each方法中fn的具体调用方法并不是采用简单的fn(i,val)或fn(args),而是采用了***.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代码
复制代码代码如下:
functionadd(a,b)
{
alert(a+b);
}
functionsub(a,b)
{
alert(a-b);
}
***.call(sub,3,1);

用add来替换sub,***.call(sub,3,1)==add(3,1),所以运行结果为:alert(4);
注意:js中的函数其实是对象,函数名是对Function对象的引用。
具体call更深入的就不在这里提了。
下面提一下jQuery的each方法的几种常用的用法
Js代码
复制代码代码如下:
vararr=["one","two","three","four"];
$.each(arr,function(){
alert(this);
});
//上面这个each输出的结果分别为:one,two,three,four
vararr1=[[1,4,3],[4,6,6],[7,20,9]]
$.each(arr1,function(i,item){
alert(item[0]);
});
//其实arr1为一个二维数组,item相当于取每一个一维数组,
//item[0]相对于取每一个一维数组里的第一个值
//所以上面这个each输出分别为:147
varobj={one:1,two:2,three:3,four:4};
$.each(obj,function(key,val){
alert(obj[key]);
});
//这个each就有更厉害了,能循环每一个属性
//输出结果为:1234