我应该如何在同一个循环中迭代多个getElementsByClassName()调用的结果?

时间:2013-10-14 23:11:55

标签: javascript arrays loops concatenation getelementsbyclassname

我想这样做:

a1 = document.getElementsByClassName('classA');
a2 = document.getElementsByClassName('classB');
a3 = a1.concat(a2);

for (var i=0; i<a3.length; ++i) {

}

即。获取classA的所有元素,classB的所有元素,然后以允许我遍历所有元素的方式组合它们。它不起作用,因为getElementsByClassName不返回标准数组。

这有效,但必须采取更明智的方式:

var els = [];
var e1 = document.getElementsByClassName('classA');
var e2 = document.getElementsByClassName('classB');
[].forEach.call(e1, function(el) { els.push(el); });
[].forEach.call(e2, function(el) { els.push(el); });

2 个答案:

答案 0 :(得分:5)

在现代浏览器中,您可以使用:

var a = document.querySelectorAll('.classA, .classB');

这会找到所有带有&#39; classA&#39;的元素。或者&#39; classB&#39;。 您可以找到更多信息和浏览器兼容性表here

答案 1 :(得分:1)

getElementsByClassName方法返回HTMLCollection而不是数组。它是一个类似于数组的对象,但你不能在其上使用所有数组方法。

使用slice方法将集合转换为数组,然后您可以将它们连接起来:

var a3 = Array.prototype.slice.call(a1).concat(Array.prototype.slice.call(a2));

注意:这需要IE9或更高版本。