Подтвердить что ты не робот

JQuery -.forEach() не работает в IE8

Я создал это небольшое взаимодействие для одной из платформ на работе - http://jsfiddle.net/S79qp/426/

Он отлично работает во всех браузерах отдельно от IE8. Когда я запускаю консоль, кажется, что этот раздел имеет проблемы с...

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

Может ли кто-нибудь показать мне альтернативу IE8, чтобы я мог сделать ее совместимой для требуемых версий?

4b9b3361

Ответ 1

Используйте метод jQuery.each:

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

Если целевой массив пуст от начала, вы можете использовать метод jQuery.map для этого:

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

Ответ 2

Если все, что вам нужно, это forEach() в 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]);
      }
    };
}

Это приведет к как ожидалось в любом браузере, который не имеет встроенного модуля.

Ответ 3

Действительно, метод forEach доступен только из IE9. Вы должны использовать версию jQuery "each()", чтобы предлагать поддержку старым браузерам.

Ответ 4

forEach не поддерживается в IE 8, вместо этого вы можете использовать регулярный цикл:

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

Ответ 5

У меня была такая же проблема с IE8, и вот как я ее решил!

Прежде всего, нужно зациклиться и получить данные из объекта JSON array. Взгляните оригинал, который хорошо работает в Firex, chrome и последнем IE, но не IE8

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