已解决问题
谷歌1wusuozhi用户在2016.04.19提交了关于“天坛jQuery each()方法的使用方法”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2024-09-16T06:53:56。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,感谢你,我会记得你对我的好的 !
详细问题描述及疑问:期待您的答案,感谢你,我会记得你对我的好的 !
jQuery和jQuery对象都实现了该方
复制代码代码如下:
jQuery.prototype.each
retur
}
让我们看一下jQ
jQ
该方法有三个参数:进行操作的对象obj,
让我们根据ojb对象进行讨论:
1.obj对象是数组
2.obj对象不是
该方法同1的最大区别是:fn方法会被逐次不考虑返回值的进行进行。换句话说,obj对象的所有属性都会被fn方法进行调用,即使fn函数返回false。调用传入的参数同1类似。
jQuery.each=fu
if(args){
if(obj
for(variinobj)
fn.apply(obj,args);
}e
for(
if(fn.ap
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