将getElementById返回值视为数组

时间:2011-07-20 06:41:08

标签: javascript jquery html arrays dom

我有一个Javascript如下;

if (document.getElementsByClassName('someClass'))
{
obj = document.getElementsByClassName('someClass');
}
else if (document.getElementById('someId'))
{
obj = document.getElementById('someId');
}

现在有一个for循环作用于这个“obj”

for(i=0; i<obj.length;i++){
obj[i].addEventListener() // Pseudo code shown here
} 

问题是,如果将obj作为数组返回,即从document.getElementsByClassName返回,则此工作正常。

但是如果document.getElementById('someId')为真,则它不返回数组并且for循环无法执行。

我如何解决这个问题,因为我对HTML代码本身无能为力?

谢谢。

4 个答案:

答案 0 :(得分:5)

您只需创建一个数组:

else if (document.getElementById('someId')) {
    obj = [document.getElementById('someId')]; // note the array literal
}

getElementById的返回值总是是一个DOM元素,所以你无法改变它。 ID应该是唯一的,因此即使您有多个具有相同ID的元素,它也只会返回其中一个。

鉴于IE8及以下版本中不存在getElementsByClassName,您还应该查看document.querySelectorAll [docs](至少在IE8中有效)。

答案 1 :(得分:5)

只需替换

obj = document.getElementById('someId');

obj = [document.getElementById('someId')];

答案 2 :(得分:1)

var obj = [];

if (document.getElementsByClassName('someClass'))
{
obj = document.getElementsByClassName('someClass');
}
else if (document.getElementById('someId'))
{
obj.push(document.getElementById('someId'));
}

答案 3 :(得分:1)

你可以用这个

obj = [];
obj.push(document.getElementById('someId'));