Wie kann man überprüfen, ob ein Objekt eine Instanz einer NodeList in IE ist?
-
02-07-2019 - |
Frage
Warum ist NodeList undefined in IE6 / 7?
<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>
Das funktioniert in FF3 / Safari 3.1, aber funktioniert nicht in IE6 / 7. Wer irgendwelche Ideen, wie zu überprüfen, ob el eine Instanz von NodeList in allen Browsern ist?
Keine korrekte Lösung
Andere Tipps
" Duck Typing " sollte immer funktionieren:
...
if (typeof el.length == 'number'
&& typeof el.item == 'function'
&& typeof el.nextNode == 'function'
&& typeof el.reset == 'function')
{
alert("I'm a NodeList");
}
Adam Franco Antwort fast funktioniert. Leider gibt typeof el.item
verschiedene Dinge in verschiedener Version von IE (7: string, 8: Objekt, 9: Funktion). Also habe ich seinen Code verwende, aber ich änderte die Linie typeof el.item !== "undefined"
und geändert ==
durchweg ===
.
if (typeof el.length === 'number'
&& typeof el.item !== 'undefined'
&& typeof el.nextNode === 'function'
&& typeof el.reset === 'function')
{
alert("I'm a NodeList");
}
Ich möchte nur etwas verwenden, das immer auf eine bestimmte Art auswertet. Dann tun Sie nur einen wahr / falsch-Typen überprüfen, ob Sie ein gültiges Objekt bekommen. In Ihrem Fall würde ich einen Verweis auf das ausgewählte Element erhalten, wie Sie jetzt sind und dann seine getOptions () -Methode eine HTMLCollection zu erhalten, die die Optionen darstellt. Dieser Objekttyp ist sehr ähnlich zu einem NodeList, so sollten Sie kein Problem mit ihm arbeiten, haben.
Mit jQuery :
if (1 < $(el).length) {
alert("I'm a NodeList");
}