将getElementById返回值视为数组

tes*_*dtv 0 html javascript arrays jquery dom

我有一个Javascript如下;

if (document.getElementsByClassName('someClass'))
{
obj = document.getElementsByClassName('someClass');
}
else if (document.getElementById('someId'))
{
obj = document.getElementById('someId');
}
Run Code Online (Sandbox Code Playgroud)

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

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

问题是,如果obj作为数组返回,则可以正常工作document.getElementsByClassName.

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

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

谢谢.

Fel*_*ing 5

您只需创建一个数组:

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

返回值getElementById始终是DOM元素,因此您无法更改它.ID应该是唯一的,因此即使您有多个具有相同ID的元素,它也只会返回其中一个.

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


Dan*_*ara 5

只需更换

obj = document.getElementById('someId');
Run Code Online (Sandbox Code Playgroud)

obj = [document.getElementById('someId')];
Run Code Online (Sandbox Code Playgroud)