【问题标题】:JavaScript indexOf vs Array.prototype.indexOf IE compatibility error [duplicate]JavaScript indexOf vs Array.prototype.indexOf IE兼容性错误[重复]
【发布时间】:2012-07-12 14:18:32
【问题描述】:

可能重复:
Why doesn't indexOf work on an array IE8?

我最近开发了一个使用原生 Javascript 和 jQuery 的脚本。我的大部分开发都是使用 IE 9、Chrome、Firefox。对于他们所有人来说,下面的行都完美地工作:

if(data.cols.indexOf("footprint") < 0)

但是,今天我将一些代码推送到生产系统,一些客户回来说他们的页面坏了。我已将搜索范围缩小到indexOf,显然 IE 8 一点也不喜欢。所以我试图找到一个替代方案,我发现了这一点Array.prototype.indexOf,但我不确定如何将它与上面类似的 if-else 联系起来。

另外,如果有更好的选择,那么我会全力以赴。另外,这是我可能必须仅适用于 IE 8 浏览器的东西,如果找到 IE 8,则使用它,如果不使用原始浏览器?

【问题讨论】:

  • Array.prototype.indexOf 最初在 IE9 中得到支持,请参阅 this page on MDN 以获取可以包含以支持旧版本 IE 的代码

标签: javascript jquery internet-explorer


【解决方案1】:

这个问题已经出现很多次了,可以在这里找到另一个Stackoverflow线程:How to fix Array indexOf() in JavaScript for Internet Explorer browsers

不同主题的几个人推荐使用this code from MDC。这似乎是代码:

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

在调用 indexOf() 之前运行这段代码

【讨论】:

    猜你喜欢
    • 2014-06-03
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 2011-11-16
    • 2010-12-26
    • 1970-01-01
    • 2018-09-22
    相关资源
    最近更新 更多