【问题标题】:Jquery - .forEach() not working in IE8Jquery - .forEach() 在 IE8 中不起作用
【发布时间】:2017-02-08 05:49:35
【问题描述】:

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

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

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

谁能告诉我一个 IE8 友好的替代方案,以便我可以使它与所需的版本兼容?

【问题讨论】:

  • 为什么不用 jQuery 而不是原型
  • @Sarfaraz:在这种情况下,prototype 不是库,而是 Javascript 中的关键字。
  • @Sarfaraz 另外使用原型有什么问题?
  • @nickyduck 实际上有点混淆了原型并试图理解原型
  • @Gufaa 我听不懂你在说什么

标签: javascript jquery html internet-explorer-8


【解决方案1】:

如果你想要的只是 IE8 中的forEach()

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]);
      }
    };
}

这将在任何没有内置它的浏览器中表现为as expected

【讨论】:

  • 投了赞成票,因为当涉及到一个大型项目时,有时帮助纠正错误的浏览器而不是尝试纠正实际上没有错误的代码更容易、更安全
  • 在提供的链接中使用 polyfill 会更好。该代码已经完善。
  • 我发现你的答案很有用,但它对我不起作用(IE11、Windows 10)。它说“对象”(一个基本数组)不处理forEach 方法。我试过console.log函数的typeoffunction本身,它被定义为[native code]的函数。
【解决方案2】:

使用jQuery.each method

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

如果目标数组从一开始就为空,您可以使用 jQuery.map method 代替:

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

【讨论】:

  • 现在控制台说它不支持 index = a.indexOf(current) + 1; if (index = l.length) { index = 0; @Guffa }
  • @Milo-J: Array.indexOf 是最近添加的另一种方法。请改用jQuery.inArray 方法。 api.jquery.com/jQuery.inArray
  • 我尝试过这样做,但它不起作用。你能看看吗? jsfiddle.net/S79qp/428@Guffa
  • @Milo-J:当您使用 text 方法从元素中获取文本时,您不会得到与使用 html 方法输入的内容相同的内容,所以您的代码将永远无法在数组中找到文本。
  • l 非常混乱。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      我在使用 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));
                  });

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-03
        • 2013-06-18
        • 2012-09-12
        • 2012-07-08
        • 1970-01-01
        • 1970-01-01
        • 2016-02-27
        • 1970-01-01
        相关资源
        最近更新 更多