我有一个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代码本身无能为力?
谢谢。
答案 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'));