method for array javascript html foreach internet-explorer-11

array - javascript for in



IE admite forEach(...) cuando se invoca desde la consola pero no cuando se invoca desde el código (2)

Básicamente document.querySelectorAll devolvería una nodeList una matriz como objeto, no una matriz. Tienes que convertirlo a una matriz antes de invocar funciones de matriz sobre eso.

var menus = document.querySelectorAll("ul.application>li>a"); menus = [].slice.call(menus); menus.forEach(function(element) { ... });

Si su entorno es compatible con ES6, puede usar Array.from()

var menus = document.querySelectorAll("ul.application>li>a"); menus = Array.from(menus); menus.forEach(function(element) { ... });

Estoy ejecutando este fragmento de la consola. En IE produce la salida tal como se esperaba. Ejecutar lo mismo en Cr y FF como referencia confirma la congruencia del comportamiento.

["a", "b"].forEach(function(element) { console.log(element); });

Sin embargo, cuando ejecuto el siguiente script, recibo errores que me dicen que el objeto no tiene forEach (...) declarado en él. El problema ocurre en IE pero no en Cr ni en FF.

var menus = document.querySelectorAll("ul.application>li>a"); menus.forEach(function(element) { ... }

Comprobé que los menús variables están declarados y que elegir sus elementos produce lo que esperaba, es decir, que los menús [0] existen y es una etiqueta. Se ve un poco diferente en IE en comparación con los demás, pero podría ser simplemente la versión diferente.

He sido bendecido trabajando con Cr y FF, por lo que mi experiencia en tratar con IE es limitada. Google no me dio mucha sabiduría, tampoco.

¿Cómo lo soluciono más?


No es un problema del navegador, es más como que obtienes una matriz como objeto, con querySelectorAll . Devuelve un NodeList , que es iterable, pero no directamente con los métodos de matriz.

Pero puedes tomar prestado el método de Array.prototype , como este

Array.prototype.forEach.call(menu, function(element) { /* ... */ });

Si le gustaría obtener primero una matriz real, podría convertirla con

array = Array.apply(null, menu);