27

我为其中一个工作平台创建了这个小交互 - http://jsfiddle.net/S79qp/426/

它在除 IE8 之外的所有浏览器中都能正常工作。当我运行控制台时,似乎是这部分有问题......

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

有人可以向我展示一个 IE8 友好的替代方案,以便我可以使其与所需的版本兼容吗?

4

5 回答 5

45

如果你想要的只是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]);
      }
    };
}

这将在任何没有内置它的浏览器中按预期运行。

于 2014-03-23T23:14:12.633 回答
37

使用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();
});
于 2013-04-24T08:23:44.013 回答
4

IE 8 不支持 forEach,您可以使用常规循环:

for ( var i = 0; i < myArray.length; i++ ) {
   // code
}
于 2014-04-08T21:24:20.540 回答
2

实际上,forEach 方法仅适用于 IE9。您应该使用 jQuery 版本“each()”以便为旧浏览器提供支持。

于 2013-04-24T08:24:56.820 回答
1

我在 IE8 上遇到了同样的问题,这就是我解决它的方法!

首先想要循环并从JSON 数组对象中获取数据。看看在 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));
            });

这是我经过一整天的奋斗后开发的解决方案

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

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

于 2016-11-21T09:06:28.337 回答