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

时间:2008-09-30 00:49:11

标签: 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>

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

4 个答案:

答案 0 :(得分:15)

Duck Typing”应始终有效:

...

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

答案 1 :(得分:4)

Adam Franco的回答几乎有效。不幸的是,typeof el.item在不同版本的IE中返回不同的东西(7:字符串,8:对象,9:函数)。所以我正在使用他的代码,但我将行更改为typeof el.item !== "undefined"并将==更改为===

if (typeof el.length === 'number' 
    && typeof el.item !== 'undefined'
    && typeof el.nextNode === 'function'
    && typeof el.reset === 'function')
{
    alert("I'm a NodeList");
}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

使用 jQuery

if (1 < $(el).length) {
    alert("I'm a NodeList");
}