eachjquery的简单介绍

jquery中使用each()和for循环哪个好些

jquery的each比原生的for循环慢很多!!为什么?

创新互联是一家专业提供港口企业网站建设,专注与网站设计、成都网站设计html5、小程序制作等业务。10年已为港口众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。

其实查看jQuery的源代码,发现each的代码很简单,但为什么性能和原生的for循环相差几十倍呢?

jquery的each的核心代码

for (; i  length; i++) {  

value = callback.call(obj[i], i, obj[i]);  

if (value === false) {  

break;  

}  

}

看着很简单,但为什么会慢很多呢?

编写测试代码如下:

var length=300000;  

function GetArr() {  

var t = [];  

for (var i = 0; i  length; i++) {  

t[i] = i;  

}  

return t;  

}  

function each1(obj, callback) {  

var i = 0;  

var length = obj.length  

for (; i  length; i++) {  

value = callback(i, obj[i]);  

/* if ( value === false ) {去掉了判断 

break; 

}*/  

}  

}  

function each2(obj, callback) {  

var i = 0;  

var length = obj.length  

for (; i  length; i++) {  

value = callback(i, obj[i]);/*去掉了call*/  

if (value === false) {  

break;  

}  

}  

}  

function each3(obj, callback) {  

var i = 0;  

var length = obj.length  

for (; i  length; i++) {  

value = callback.call(obj[i], i, obj[i]);/*自己写的call*/  

if (value === false) {  

break;  

}  

}  

}  

function Test1() {  

var t = GetArr();  

var date1 = new Date().getTime();  

var lengtharr = t.length;  

var total = 0;  

each1(t, function (i, n) {  

total += n;  

});  

var date12 = new Date().getTime();  

console.log("1Test" + ((date12 - date1)));  

}  

function Test2() {  

var t = GetArr();  

var date1 = new Date().getTime();  

var total = 0;  

each2(t, function (i, n) {  

total += n;  

});  

var date12 = new Date().getTime();  

console.log("2Test" + ((date12 - date1)));  

}  

function Test3() {  

var t = GetArr();  

var date1 = new Date().getTime();  

var total = 0;  

each3(t, function (i, n) {  

total += n;  

});  

var date12 = new Date().getTime();  

console.log("3Test" + ((date12 - date1)));  

}  

function Test4() {  

var t = GetArr();  

var date1 = new Date().getTime();  

var total = 0;  

$.each(t, function (i, n) {  

total += n;  

});  

var date12 = new Date().getTime();  

console.log("4Test" + ((date12 - date1)));  

}

运行测试,发现,第一个和第二个相差不是很大,这说明由于break这个判断导致的性能差异很少,

但第二个和第三个,第四个偏差就就不止一倍了,而第二个和第三个唯一的区别就是调用了call,看来call会导致性能损失,因为call会切换上下文,当然jQuery的each慢还有其他原因,它还在循环中调用了其他的方法,call只是一个原因罢了。

因此可以说call,和apply都是js中比较消耗性能的方法,在性能要求严格时,建议少用。

jquery each 里面可以在有each吗

在jquery中的each有两种用法,分别是$.each()和$(selector).each(); $.each()与$(selector).each()不同, 后者专用于jquery对象的遍历, 前者可用于遍历任何的集合(无论是数组或对象),如果是数组,回调函数每次传入数组的索引和对应的值

jquery里面的each()是什么意思

each()就是循环,给你例子吧,比如你的页面只有 3对p标签p1/pp2/pp3/p$("p").each(function(i){//这样写它就是循环三次,其中function中的i就是指索引alert(i);//弹出循环到当前p的索引,索引从0开始,你可以试试,执行程序看效果就是最好的理解alert($(this).text());//弹出循环到当前p的文本});

JQuery中$each 和$each的区别详解

在jquery中,遍历对象和数组,经常会用到$().each和$.each(),两个方法。两个方法是有区别的,从而这两个方法在针对不同的操作上,显示了各自的特点。

$().each,对于这个方法,在dom处理上面用的较多。如果页面有多个input标签类型为checkbox,对于这时用$().each来处理多个checkbook,例如:

$(“input[name=’ch’]”).each(function(i){

if($(this).attr(‘checked’)==true)

{

//一些操作代码

}

回调函数是可以传递参数,i就为遍历的索引。

对于遍历一个数组,用$.each()来处理,简直爽到了极点。例如:

$.each([{“name”:”limeng”,”email”:”xfjylimeng”},{“name”:”hehe”,”email”:”xfjylimeng”},function(i,n)

{

alert(“索引:”+i,”对应值为:”+n.name);

});

参数i为遍历索引值,n为当前的遍历对象.

var arr1 = [ “one”, “two”, “three”, “four”, “five” ];

$.each(arr1, function(){

alert(this);

});

输出:one two three four five

var arr2 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

$.each(arr2, function(i, item){

alert(item[0]);

});

输出:1 4 7

var obj = { one:1, two:2, three:3, four:4, five:5 };

$.each(obj, function(key, val) {

alert(obj[key]);

});

输出:1 2 3 4 5

在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代码

function add(a,b)

{

alert(a+b);

}

function sub(a,b)

{

alert(a-b);

}

add.call(sub,3,1);

用 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

jquery的each是什么函数

遍历一个jQuery对象,为每个匹配元素执行一个函数。

ul    

lifoo/li    

libar/li

/ul

$( "li" ).each(function( index ) {  

console.log( index + ": "" + $(this).text() );

});

//或者一个数组,集合,map

$.each(集合,function(){

console.log( 集合.name+ ": "" +集合.age );

});


分享文章:eachjquery的简单介绍
转载来源:http://azwzsj.com/article/hodosd.html