Jquery – .forEach() funktioniert nicht in IE8

Lesezeit: 3 Minuten

Benutzer-Avatar
Milo-J

Ich habe diese kleine Interaktion für eine der Plattformen bei der Arbeit erstellt – http://jsfiddle.net/S79qp/426/

Es funktioniert gut in allen Browsern außer IE8. Wenn ich die Konsole starte, scheint es dieser Abschnitt zu sein, mit dem es Probleme gibt …

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

Kann mir jemand eine IE8-freundliche Alternative zeigen, damit ich sie für die erforderlichen Versionen kompatibel machen kann?

  • Warum verwenden Sie nicht jQuery anstelle von Prototypen?

    – Der Mechaniker

    24. April 2013 um 8:25 Uhr

  • @Sarfaraz: Die prototype in diesem Fall nicht die Bibliothek, sondern das Schlüsselwort in Javascript.

    – Gufa

    24. April 2013 um 8:41 Uhr

  • @Sarfaraz Was ist auch falsch an der Verwendung von Prototypen?

    – Rickyduck

    24. April 2013 um 9:09 Uhr

  • @nickyduck bin eigentlich ein bisschen mit Prototyp verwechselt und versuche, Prototyp zu verstehen

    – Der Mechaniker

    24. April 2013 um 9:59 Uhr


  • @Gufaa verstehe nicht, was du sagst

    – Der Mechaniker

    24. April 2013 um 10:00 Uhr

Wenn alles, was Sie wollen, ist forEach() im 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]);
      }
    };
}

Dies wird sich verhalten wie erwartet in jedem Browser, der es nicht eingebaut hat.

  • Up hat dafür gestimmt, dass es bei einem großen Projekt manchmal einfacher und sicherer ist, bei der Korrektur des fehlerhaften Browsers zu helfen, anstatt zu versuchen, Code zu korrigieren, der nicht wirklich fehlerhaft ist

    – Wütend 84

    17. März 2015 um 4:00 Uhr

  • Es wäre besser, Polyfill unter dem angegebenen Link zu verwenden. Dieser Code wurde perfektioniert.

    – Maxwell175

    12. April 2016 um 15:39 Uhr

  • Ich fand Ihre Antwort nützlich, aber sie konnte bei mir nicht funktionieren (IE11, Windows 10). Es besagt, dass das “Objekt” (ein einfaches Array) die nicht verarbeitet forEach Methode. Ich habe es versucht console.log das typeof der Funktion und der function selbst und es ist als eine Funktion mit definiert [native code].

    – AymDev

    25. Oktober 2017 um 9:00 Uhr

Benutzer-Avatar
Guffa

Verwenden Sie die jQuery.each Methode:

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

Wenn das Zielarray von Anfang an leer ist, können Sie die verwenden jQuery.map Methode dafür stattdessen:

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

  • Jetzt sagt die Konsole, dass sie index = a.indexOf(current) + 1 nicht unterstützt; if (index < 0 || index >= l.länge) { index = 0; @Guffa }

    – Milo-J

    24. April 2013 um 8:29 Uhr


  • @Milo-J: Array.indexOf ist eine weitere Methode, die kürzlich hinzugefügt wurde. Verwenden Sie die jQuery.inArray Methode statt. api.jquery.com/jQuery.inArray

    – Gufa

    24. April 2013 um 8:40 Uhr

  • Ich habe es versucht, aber es wird nicht funktionieren. könntest du bitte nachsehen? jsfiddle.net/S79qp/428 @Guffa

    – Milo-J

    24. April 2013 um 9:06 Uhr

  • @Milo-J: Wenn Sie den Text aus dem Element mit der text -Methode erhalten Sie nicht dasselbe zurück wie das, was Sie mit der eingegeben haben html -Methode, sodass Ihr Code den Text im Array niemals finden wird.

    – Gufa

    24. April 2013 um 9:54 Uhr

  • das l ist sehr verwirrend.

    – deddu

    15. September 2014 um 16:35 Uhr

forEach wird in IE 8 nicht unterstützt, stattdessen können Sie eine reguläre Schleife verwenden:

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

Benutzer-Avatar
Laurent S.

Tatsächlich ist die forEach-Methode nur ab IE9 verfügbar. Sie sollten die jQuery-Version „each()“ verwenden, um ältere Browser zu unterstützen.

Ich hatte das gleiche Problem mit IE8 und hier ist, wie ich es gelöst habe!

Zuerst wollte ich eine Schleife machen und Daten von bekommen JSON-Array Objekt. Schauen Sie sich das Original an, das in Firex, Chrome und dem neuesten IE gut funktioniert, aber nicht in IE8

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

Hier ist die Lösung, die ich nach einem langen Tag des Kampfes entwickelt habe

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

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

1146440cookie-checkJquery – .forEach() funktioniert nicht in IE8

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy