JQuery .each()替换(for..in)

时间:2014-05-15 17:28:58

标签: jquery

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

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

选择器$(' .class')没有返回一个对象数组,但是"只是"对象。

你可以看到:

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

考虑到这不是一个对象数组=>用for..in循环遍历所有找到的对象是不可能的?

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

2 个答案:

答案 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]);

http://jsfiddle.net/5ygMa/

这是你要求的吗?