是否可以将.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/这就是你要的吗?