web-dev-qa-db-fra.com

Jquery - .forEach () ne fonctionne pas dans IE8

J'ai créé cette petite interaction pour l'une des plateformes au travail - http://jsfiddle.net/S79qp/426/

Cela fonctionne très bien dans tous les navigateurs sauf IE8. Lorsque j'exécute la console, il semble que cette section pose des problèmes ...

Array.prototype.forEach.call(l, function(item) {
        a.Push(jQuery(item).text());
   });

Est-ce que quelqu'un peut me montrer une alternative conviviale IE8 pour que je puisse le rendre compatible avec les versions requises?

27
Milo-J

Utilisez la méthode jQuery.each :

jQuery.each(l, function(index, item){
  a.Push(jQuery(item).text());
});

Si le tableau cible est vide depuis le début, vous pouvez utiliser la méthode jQuery.map pour cela à la place:

var a = jQuery.map(l, function(item){
  return jQuery(item).text();
});
36
Guffa

Si tout ce que vous voulez est forEach() dans IE8:

if (typeof Array.prototype.forEach != 'function') {
    Array.prototype.forEach = function(callback){
      for (var i = 0; i < this.length; i++){
        callback.apply(this, [this[i], i, this]);
      }
    };
}

Cela se comportera comme prévu dans tout navigateur qui ne l’a pas intégré.

44
Chad Hedgcock

forEach n'est pas supporté dans IE 8, vous pouvez utiliser une boucle régulière:

for ( var i = 0; i < myArray.length; i++ ) {
   // code
}
2
veritascs

En effet, la méthode forEach est uniquement disponible à partir de IE9. Vous devez utiliser la version jQuery "each ()" afin de prendre en charge les navigateurs plus anciens.

2
Laurent S.

J'ai eu le même problème avec IE8 et voici comment je l'ai résolu!

Tout d’abord, je voulais faire une boucle et obtenir des données à partir de tableau JSON objet . Regardez l’original qui fonctionne bien dans Firex, Chrome et le dernier IE mais pas IE8

            data.children.forEach(function(item) {
              //javascript: console.log(item);
              console.log(data.children);
              attachRel(item, '1' + (data.children.length > 1 ? 1 : 0));
            });

Voici la solution que j'ai développée après une longue journée de lutte

            $.each(data.children, function () {

                attachRel(this, '1' + (data.children.length > 1 ? 1 : 0));
            });

1
Magige Daniel