2011-08-22 44 views
26

Đây là dòng:Tại sao không .filter() hoạt động trong Internet Explorer 8?

songs = songs.filter(function (el) { 
    return el.album==album; 
}); 

Đây là lỗi:

Object doesn't support this property or method

này Làm việc 100% sử dụng tốt trong Chrome. Chuyện gì vậy?

+0

tôi đăng câu trả lời của tôi trước khi tôi nhìn thấy Paul. Là bài hát một mảng hoặc đối tượng jQuery? – Dennis

Trả lời

64

Array.filter() không được bao gồm trong IE đến khi phiên bản 9.

Bạn có thể sử dụng để thực hiện nó:

if (!Array.prototype.filter) 
{ 
    Array.prototype.filter = function(fun /*, thisp */) 
    { 
    "use strict"; 

    if (this === void 0 || this === null) 
     throw new TypeError(); 

    var t = Object(this); 
    var len = t.length >>> 0; 
    if (typeof fun !== "function") 
     throw new TypeError(); 

    var res = []; 
    var thisp = arguments[1]; 
    for (var i = 0; i < len; i++) 
    { 
     if (i in t) 
     { 
     var val = t[i]; // in case fun mutates this 
     if (fun.call(thisp, val, i, t)) 
      res.push(val); 
     } 
    } 

    return res; 
    }; 
} 

Từ: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter

Hoặc kể từ khi bạn đang sử dụng jQuery, bạn có thể quấn mảng của bạn vào đối tượng jQuery trước tiên:

songs = $(songs).filter(function(){ 
    return this.album==album; 
}); 
+1

Đối số cho hàm lọc là một chỉ mục. Để có được phần tử thực tế, bạn chỉ có thể sử dụng 'this'. http://api.jquery.com/filter/ – Dennis

+2

Cảm ơn bạn! Điều này làm việc hoàn hảo. –

+0

Bạn cũng có thể làm i, v trong hàm, trong đó v là mảng và i là phần tử. –

0

Việc sử dụng hàm attr() có hoạt động không?

songs = songs.filter(function (index) { 
    return $(this).attr("album") == album; 
}); 
1

Sử dụng es5-shim, vì vậy bạn có thể sử dụng bộ lọc/chỉ mụcOf trong IE8!

Phản ứng của Facebook.js bằng cách sử dụng quá.

<!--[if lte IE 8]> 
    <script type="text/javascript" src="/react/js/html5shiv.min.js"></script> 
    <script type="text/javascript" src="/react/js/es5-shim.min.js"></script> 
    <script type="text/javascript" src="/react/js/es5-sham.min.js"></script> 
    <![endif]--> 

https://github.com/es-shims/es5-shim

Các vấn đề liên quan