如何检查对象是否是IE中NodeList的实例?
时间:2020-03-06 14:54:11 来源:igfitidea点击:
为什么在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的实例?
解决方案
我只会使用总会评估为某种类型的东西。然后,我们只需执行true / false类型检查即可查看是否有一个有效的对象。在情况下,我将像现在一样获得对选择项的引用,然后使用其getOptions()方法获取表示选项的HTMLCollection。此对象类型与NodeList非常相似,因此使用它应该没有问题。
"鸭子打字"应始终有效:
... if (typeof el.length == 'number' && typeof el.item == 'function' && typeof el.nextNode == 'function' && typeof el.reset == 'function') { alert("I'm a NodeList"); }