我正在尝试将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()));
我不太明白它们之间的区别,我搜索了这个问题,但没有找到任何明确的解释。
提前致谢。
答案 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 Array
,makeArray
将任何数组(如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()
就会返回输入对象。
只有在数组中使用适当数量的项目转换类似数组的对象时,它才能正常工作,例如函数arguments
,nodeList
,jQuery集合等。