Wie kann man überprüfen, ob ein Objekt eine Instanz einer NodeList in IE ist?

StackOverflow https://stackoverflow.com/questions/151348

  •  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");
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top