JQuery .each() replacement (for..in)



是否可以将.each()替换为for. in循环?

$('.my_class').each(function() {
  ...
});

Selector $('.class')返回的不是对象数组,而"只是"对象。

你可以看到:

console.log($('.my_class'));

考虑到这不是一个对象数组=>它是不可能通过迭代所有找到的对象与for..in循环?

.each()是唯一的解吗?

选择器$('.class')不返回对象数组,而"只是"返回对象。

返回一个jQuery对象。一个jQuery对象可以看作是HTML元素的集合。

作为一个jQuery对象支持.length属性和[]访问器,它可以被看作是一个HTML元素数组,尽管它实际上不是。

考虑到这不是一个对象数组=>它是不可能通过迭代所有找到的对象与for..in循环?

直接在$('.my_class')中使用.length[],可以使用for循环。

但是不要使用for..in,因为它通过JavaScript对象的属性迭代,而不是通过数组的索引。

.each()是唯一的解决方案吗?

作为一个"解决方案",当然,取决于问题。但是,如果您正在询问替代方案,如果您必须使用for循环,则可以:
var elements = $('.my_class'), i, n, element;
for (i = 0, n = elements.length; i < n; i++) {
    element = elements[i];
    // do stuff with element (it is an HTML Element)
}

但是,如果您确实需要一个元素数组,您可以在jQuery对象中调用.get(),或者更好的是调用.toArray()函数:

// here, elementsArray is really an array of HTML Elements
var elementsArray = $('.my_class').toArray(); 

Selector $('.class')返回的不是对象数组,而"只是"对象。

它实际上返回一个jQuery对象,它是一个具有类似数组结构的对象。

正如在评论中提到的,您可以使用$('.class').get()获得包含元素的数组。

因为它仍然是一个数组,所以我不推荐使用for…In循环,它应该用于迭代对象属性而不是数组。即使它可以工作,我还是建议使用"正常"的for循环,例如

var elements = $('.myclass').get();
for(var i = 0; i < elements.length; i++)
    console.log(elements[i]);
http://jsfiddle.net/5ygMa/

这就是你要的吗?

最新更新