JQuery中的each函数在1.3.2的官方文档中的描述以下,each是jquery下比较实用的遍历函数。each()函数是基本上全部的框架都提供了的一个工具类函数,经过它,你能够遍历对象、数组的属性值并进行处理。jquery
jQuery和jQuery对象都实现了该方法,对于jQuery对象,只是把each方法简单的进行了委托:把jQuery对象做为第一个参数传递给 jQuery的each方法.换句话说:jQuery提供的each方法是对参数一提供的对象的中全部的子元素逐一进行方法调用。而jQuery对象提供 的each方法则是对jQuery内部的子元素进行逐个调用。 数组
让咱们看一下jQuery提供的each方法的具体实现,app
jQuery.each(obj,fn,arg)框架
该方法有三个参数:进行操做的对象obj,进行操做的函数fn,函数的参数args。ide
让咱们根据ojb对象进行讨论:函数
1.obj对象是数组工具
each 方法会对数组中子元素的逐个进行fn函数调用,直至调用某个子元素返回的结果为false为止,也就是说,咱们能够在提供的fn函数进行处理,使之知足一 定条件后就退出each方法调用。当each方法提供了arg参数时,fn函数调用传入的参数为arg,不然为:子元素索引,子元素自己this
2.obj 对象不是数组spa
该方法同1的最大区别是:fn方法会被逐次不考虑返回值的进行进行。换句话说,obj对象的全部属性都会被fn方法进行调用,即便fn函数返回false。调用传入的参数同1相似。.net
需 要特别注意的是each方法中fn的具体调用方法并非采用简单的fn(i,val)或fn(args),而是采用了 fn.call(val,i,val)或fn.apply(obj.args)的形式,这意味着,在你本身的fn的实现中,能够直接采用this指针引用 数组或是对象的子元素。这种方式是绝大多数jQuery所采用的一种实现方式。
在jQuery里有一个each方法,用起来很是的爽,不用再像原来那样写for循环,jQuery源码里本身也有不少用到each方法。
其实jQuery里的each方法是经过js里的call方法来实现的。
call这个方法很奇妙,其实官方的说明是:“调用一个对象的一个方法,以另外一个对象替换当前对象。”网上更多的解释是变换上下文环境,也有说是改变上下文this指针。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj
可选项。将被用做当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明
call 方法能够用来代替另外一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
引用网上有一个很经典的例子
Js代码
用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,因此运行结果为:alert(4);
注意:js 中的函数实际上是对象,函数名是对 Function 对象的引用。
具体call更深刻的就不在这里提了。
下面提一下jQuery的each方法的几种经常使用的用法
Js代码
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
原文出自:http://www.jb51.net/article/22626.htm