2012-07-12 96 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前只需運行該代碼()