如何检查对象是否是IE中NodeList的实例?

jon*_*jon 7 javascript

为什么在IE6/7中NodeList未定义?

<form action="/" method="post" id="testform">
    <input type="checkbox" name="foobar[]" value="1" id="" />
    <input type="checkbox" name="foobar[]" value="2" id="" />
    <input type="checkbox" name="foobar[]" value="3" id="" />    
</form>

<script type="text/javascript" charset="utf-8">
(function () {
    var el = document.getElementById('testform')['foobar[]']
    if (el instanceof NodeList) {
        alert("I'm a NodeList");
    }  
})();
</script>
Run Code Online (Sandbox Code Playgroud)

这适用于FF3/Safari 3.1,但在IE6/7中不起作用.任何人都有任何想法如何检查el是否是所有浏览器的NodeList实例?

Ada*_*nco 15

" 鸭子打字 "应始终有效:

...

if (typeof el.length == 'number' 
    && typeof el.item == 'function'
    && typeof el.nextNode == 'function'
    && typeof el.reset == 'function')
{
    alert("I'm a NodeList");
}
Run Code Online (Sandbox Code Playgroud)

  • 我本来打算投票(非常hacky),但经过更多的研究,这似乎是在IE中做到这一点的唯一方法.+1. (5认同)

Jer*_*oot 0

我只会使用总是评估为某种类型的东西。然后,您只需执行真/假类型检查即可查看是否获得了有效的对象。在您的情况下,我将像您现在一样获取对选择项的引用,然后使用其 getOptions() 方法来获取表示选项的 HTMLCollection。该对象类型与 NodeList 非常相似,因此使用它应该没有问题。