¿Cómo verificar si un objeto es una instancia de una NodeList en IE?

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

  •  02-07-2019
  •  | 
  •  

Pregunta

¿Por qué NodeList no está definido en 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>

Esto funciona en FF3 / Safari 3.1 pero no funciona en IE6 / 7. ¿Alguien tiene alguna idea de cómo verificar si el es una instancia de NodeList en todos los navegadores?

No hay solución correcta

Otros consejos

" Duck Typing " siempre debería funcionar:

...

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

La respuesta de Adam Franco casi funciona. Desafortunadamente, typeof el.item devuelve diferentes cosas en diferentes versiones de IE (7: cadena, 8: objeto, 9: función). Así que estoy usando su código, pero cambié la línea a typeof el.item! == " undefined " y cambié == a === en todo.

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

Simplemente usaría algo que siempre se evalúa a un cierto tipo. Luego solo realiza una verificación de tipo verdadero / falso para ver si tiene un objeto válido. En su caso, obtendría una referencia al elemento seleccionado como ahora, y luego usaría su método getOptions () para obtener una colección HTMLC que representa las opciones. Este tipo de objeto es muy similar a una NodeList, por lo que no debería tener problemas para trabajar con él.

Con jQuery :

if (1 < $(el).length) {
    alert("I'm a NodeList");
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top