Internet Explorer no acepta la propiedad forEach

publicado por: Anonymous

Tengo un código que se ejecuta en Firefox y en chrome pero cuando se lo voy a ejecutar en IE me da error:

El objeto no acepta la propiedad o el método 'forEach'

Me vi algunas búsquedas y encontré

https://tips.tutorialhorizon.com/2017/01/06/object-doesnt-support-property-or-method-foreach/

Mi idea entonces era cambiar los:

   return b += '<ul class="slide">', this.props.collectionData.forEach(function(c) {
                            b += '<li class="carouselItem">', b += a.contentItem1(c), b += '</li>'
                        }), b += '</ul>', b}

...... )), d.forEach(function(b) {

Por los

this.props.collectionData.prototype.forEach

Simplemente añadiendo prototype antes del.forEach y obtengo el error de:
SCRIPT5007: No se puede obtener la propiedad ‘forEach’ de referencia nula o sin definir

El código JS no es mío y no sabría tampoco como meterle mano con for() normales porque están dentro de returns…

Gracias.

solución

El problema que tienes es que IE (cualquier versión) no implementa el método forEach en la clase NodeList.

Cuando haces algo como

_x000D_

_x000D_

let elems=document.querySelectorAll('span');_x000D_
console.log(elems instanceof Array);_x000D_
console.log(elems instanceof NodeList);

_x000D_

<div id="contenedor">_x000D_
  <span>Hola</span>_x000D_
  <span>a</span>_x000D_
  <span>todos</span>_x000D_
  <span>!</span>_x000D_
</div>

_x000D_

_x000D_

_x000D_

Obtienes una NodeList, no un Array de elementos.

Lo que puedes hacer es robar el método de Array:

_x000D_

_x000D_

//Quitamos a NodeList el método, para simular IE_x000D_
NodeList.prototype.forEach = undefined;_x000D_
_x000D_
_x000D_
let elems = document.querySelectorAll('span');_x000D_
console.log(elems instanceof Array);_x000D_
console.log(elems instanceof NodeList);_x000D_
try {_x000D_
  elems.forEach(e => console.log(e));_x000D_
} catch (error) {_x000D_
  console.log('Error:', error.message)_x000D_
}_x000D_
_x000D_
//tomamos prestado el método de la clase Array_x000D_
NodeList.prototype.forEach = Array.prototype.forEach;_x000D_
_x000D_
elems.forEach(e => console.log(e));

_x000D_

<div id="contenedor">_x000D_
  <span>Hola</span>_x000D_
  <span>a</span>_x000D_
  <span>todos</span>_x000D_
  <span>!</span>_x000D_
</div>

_x000D_

_x000D_

_x000D_

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *