jquery中toArray和makeArray之间的区别

时间:2013-05-08 06:34:12

标签: javascript jquery html dom

我正在尝试将DOM元素转换为对象的集合。但我不知道toArray()和makeArray()

之间的主要区别是什么

HTML

<div id="firstdiv">
   <div>foo1</div>
   <div>foo2</div>
   <div>foo3</div>
</div>

我使用以下代码将节点转换为数组:

JQUERY

console.log($("#firstdiv > div").toArray());
console.log($.makeArray($("#firstdiv").html()));

我不太明白它们之间的区别,我搜索了这个问题,但没有找到任何明确的解释。

提前致谢。

3 个答案:

答案 0 :(得分:14)

根据jQuery文档:

toArray是jQuery Object上的一个方法(它包含一组DOM元素)。此方法将此DOM元素集的成员提取为javascript Array:

jQuery('.some-class').toArray() -> [ dom_el_1, dom_el_2, dom_el_3, ... ] 

makeArray(这是jQuery对象上的“静态方法”)获取array-like object(jQuery,arguments,nodeList,...)并从中构造一个正确的javascript数组,因此你可以调用结果上的Array方法:

// returns a nodeList (which is array like item) but not actual array
// you can't call reverse on int
var elems = document.getElementsByTagName("div"); 
var arr = jQuery.makeArray(elems);
arr.reverse(); // use an Array method on list of dom elements
$(arr).appendTo(document.body);

总之,toArray jQuery元素集转换为javascript ArraymakeArray将任何数组(如object )转换为javascript { {1}}。

答案 1 :(得分:2)

唯一的区别是:

toArray()DOM Element Methods,您只能在dom元素上使用它。虽然可以在自定义对象上使用makeArray(object)

没有其他差异它们大多数相同并返回普通数组对象。

示例

您有任何自定义对象:

function Person(name,age) {
  this.name = name;
  this.age = age;
}
var obj=new Person('abc',1);

现在使用这两个功能:

jQuery.makeArray(obj).length;  //would return 1

,同时:

obj.toArray().length;  //through the error function not defined

obj.length; //return undefined

答案 2 :(得分:1)

正如前面提到的,toArray()用于jQuery对象。

$.makeArray()类似于JS Array.prototype.slice.call()[].slice.call(),尽管后者使用[]

实例化对象

但处理POJO值过多length

时会有区别

<强>实施例

1

$.makeArray({ 0:'a', 1:'b', length:1 })
// ["a"]

[].slice.call({ 0:'a', 1:'b', length:1 })
// ["a"]

2

$.makeArray({ 0:'a', 1:'b', length:4 })
// { 0:'a', 1:'b', length:4 } // WUT?

[].slice.call({0:'a', 1:'b', length:4})
// ["a", "b", undefined, undefined]

3

$.makeArray({12:'a', 13:'b', length:1})
// { 12:'a', 13:'b', length:1 } // WUT?

[].slice.call({12:'a', 13:'b', length:1})
// [undefined]

4

$.makeArray({ 0:'a', 2:'b', length:2 })
// { 0:'a', 2:'b', length:2 } // WUT?

[].slice.call({ 0:'a', 2:'b', length:2 })
// ["a", undefined]

因此,只要找不到具有特定索引的键,$.makeArray()就会返回输入对象。

只有在数组中使用适当数量的项目转换类似数组的对象时,它才能正常工作,例如函数argumentsnodeList,jQuery集合等。