0

我在 IE 中运行时编写的 jquery 脚本遇到了一些性能问题,因此我正在尝试以任何可能的方式进行优化。显然使用 for 循环比使用 jQuery .each 方法快得多。这让我想到了一个关于$(this)for 循环内部的问题。我正在简化我在循环中所做的事情,只使用一个attr()函数,因为它涉及我的主要潜在问题。

我对每个都这样做(简化)

var existing = $('#existing').find('div');
    existing.each(function(){
    console.log($(this).attr('id'));
});

我已经尝试将其重写为 for 循环:

var existing = $('#existing').find('div');
for(var i = 0;i < existing.length;i++)
{
    console.log(existing[i].attr('id'));
}

它抛出一个错误说:

Uncaught TypeError: Object #<HTMLDivElement> has no method 'attr'
4

3 回答 3

2

要获取元素的 id,只需执行

existing[i].id

请注意,您的 jQuery 循环也会更快,因为

existing.each(function(){
  console.log(this.id);
}); 

更一般地,您不应该使用attr('id'),尤其是在您关心性能的情况下,因为 DOM 对象具有属性id

于 2012-12-12T17:02:03.040 回答
2

你需要existing.eq()得到jQuery对象,existing[]给你DOM对象。该函数attr()应该使用 jQuery 对象而不是 DOM (javascript) 对象调用。

var existing = $('#existing');
for(var i = 0;i < existing.length;i++)
{
    console.log(existing.eq(i).attr('id'));
}

您可以使用 each 来获取索引而无需 for 循环。

existing.each(function(index, item){
     alert(index);
     alert(item);
});
于 2012-12-12T17:02:31.793 回答
1

.在我给出答案之前,我必须问你一个问题,为什么你需要对单个元素执行循环,#existing 不是 Id,因此它是你页面上的一个独特元素。你可以简单地做

$('#existing').prop('id');  

如果您有多个元素,您应该使用一个类或另一个属性,如果是这种情况,您可以使用以下内容:

$.each('.existing',function(index,item){
    console.log(item.prop('id'));
});

不推荐使用 attr() 的 prop() ,因为 attr 已被弃用

于 2012-12-12T17:13:01.713 回答