是否可以用for..in循环替换.each()?
$('.my_class').each(function() {
...
});
选择器$(' .class')没有返回一个对象数组,但是"只是"对象。
你可以看到:
console.log($('.my_class'));
考虑到这不是一个对象数组=>用for..in循环遍历所有找到的对象是不可能的?
.each()是唯一的解决方案吗?
答案 0 :(得分:1)
选择器
$('.class')
没有返回一个对象数组,但是"只是"对象。
它返回一个jQuery对象。 jQuery object可以看作是HTML元素的集合。
由于jQuery对象支持.length
属性和[]
访问器,因此它可以被视为HTML元素的数组,但事实并非如此。
考虑到这不是一个对象数组=>用for..in循环遍历所有找到的对象是不可能的?
直接在.length
中使用[]
和$('.my_class')
,您可以使用for
循环。
But don't use 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();
答案 1 :(得分:0)
Selector $('。class')没有返回一个对象数组,而是“只是”对象。
它实际上返回一个jQuery对象,它是一个具有类似数组结构的对象。
如评论中所述,您可以使用$('.class').get()
来获取包含元素的数组。
因为它仍然是一个数组,所以我不建议使用for ... in循环,它应该用于迭代对象属性而不是数组。虽然它会起作用,但我会推荐一个“正常”的循环,例如
var elements = $('.myclass').get();
for(var i = 0; i < elements.length; i++)
console.log(elements[i]);
这是你要求的吗?