我有一些选择的dom对象:
var elems = document.getElementsByClassName("royal") ;
还有另一个对象
var collapsedElems = document.getElementsByClassName("collapsed");
当我尝试使用数组concat()方法连接elems和collapsedElems时发生了我的问题
elems.concat(collapsedElems)
但getElementsByClassName()
的返回类型实际上不是数组
宾语。我在带有typeof操作符的chrome控制台上检查了它。这对我来说似乎很奇怪我怎么能把这两组对象结合起来。 ?
答案 0 :(得分:4)
它返回一个HTML Collection,它可以完成数组所没有的操作(比如在DOM更改时获取实时更新)。
如果你想获得一个包含两个集合中元素的数组,那么你可以:
document.querySelectorAll(".royal, .collapsed");
(获取NodeList)答案 1 :(得分:2)
getElementsByClassName()返回一个HTMLcollection对象,它类似于一个数组,但实际上并不是一个数组,所以你不能使用返回的值调用数组方法。
一个hack就是使用Array的prorotype方法和.call() / .apply()来传递返回的对象作为上下文。
var elems = document.getElementsByClassName("royal") ;
var collapsedElems = document.getElementsByClassName("collapsed");
var earray = Array.prototype.slice.call(elems, 0);
var concatenated = earray.concat.apply(earray, collapsedElems) ;
console.log(concatenated)
演示:Fiddle
答案 2 :(得分:1)
来自MDN:
返回具有全部子元素的所有子元素的类数组对象 给定的类名。在文档对象上调用时,完成 搜索文档,包括根节点。你也可以打电话 任何元素上的getElementsByClassName();它只返回元素 它们是具有给定的指定根元素的后代 班级名称。
你可以试试这个:
function getElementsByClassName(className)
{
if (document.getElementsByClassName)
{
return document.getElementsByClassName(className);
}
else
{
return document.querySelectorAll('.' + className);
}
}