2012-07-12 63 views
1

可能重复:
Why doesn't indexOf work on an array IE8?的JavaScript的indexOf VS Array.prototype.indexOf IE兼容性错误

我最近开发了使用本地JavaScript和jQuery的脚本。我的大部分开发工作都是使用IE 9,Chrome,Firefox。对于所有这些线下完美的作品:

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

但是今天我推了一下我的代码到生产系统和一对夫妇的客户已经回来说自己的网页被打破。我将搜索范围缩小到了indexOf,这显然是IE8不喜欢的。所以我试图找到一个替代方案,我发现这个位Array.prototype.indexOf,但我不太确定如何将它绑定到if-else类似于上面。

此外,如果有更好的选择,那么我都是耳朵。此外,这是我可能必须适用于IE 8浏览器只,如果发现IE 8,使用此,如果不使用原?

+5

Array.prototype.indexOf首次在IE9中支持,参见[此页上MDN(HTTPS:/ /developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf),您可以使用该代码来支持旧版本的IE – MrOBrian 2012-07-12 18:43:40

回答

1

这个问题已经提出了很多次,另一个线程#1可以在这里找到: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前只需运行该代码()