22

ngay tại đây là một khối mã của tôi. Nó hoạt động hoàn hảo trong fireFox và Chrome. Nhưng không phải trong IE. Tôi nhận được lỗi "Object doesn't support property or method 'includes'"bao gồm() không hoạt động trên tất cả các trình duyệt

function rightTreeSwapfunc2() { 
    if ($(".right-tree").css("background-image").includes("stage1") == true) { 
     $(".right-tree").css({ 
      backgroundImage: "url(/plant-breeding/img/scenes/plant-breeding/stage5.jpg)" 
     }) 
    } else { 
     $(".right-tree").css({ 
      backgroundImage: "url(/plant-breeding/img/scenes/plant-breeding/stage3.jpg)" 
     }) 
    } 
} 

tôi có thể thay đổi nó lên một chút và sử dụng vani JS và làm:

document.getElementById("right-tree").classList.contains

Nhưng tôi thà xem nếu có một cách để có được nó để làm việc trong IE trước khi thay đổi JS và chỉnh sửa HTML và CSS.

+0

tôi thấy nó kỳ lạ rằng grea t leveler, jQueery, không đưa tất cả các trình duyệt xuống mẫu số chung thấp nhất - nếu 'include' không hoạt động trong IE, nó sẽ không hoạt động trong bất kỳ trình duyệt nào –

+0

[include()] (https: //developer.mozilla .org/en-US/docs/Web/JavaScript/Tham chiếu/Global_Objects/Mảng/bao gồm) chức năng không ổn định trong các trình duyệt chéo – Girish

+0

bao gồm không có gì để làm với jQueery - câu hỏi là thiếu sót: p –

Trả lời

50

Nếu bạn xem tài liệu của includes(), hầu hết các trình duyệt không hỗ trợ thuộc tính này.

Bạn có thể sử dụng hỗ trợ rộng rãi indexOf() sau khi chuyển đổi sở hữu các chuỗi sử dụng toString():

if ($(".right-tree").css("background-image").indexOf("stage1") > -1) { 
//           ^^^^^^^^^^^^^^^^^^^^^^ 

Bạn cũng có thể sử dụng polyfill từ MDN.

if (!String.prototype.includes) { 
    String.prototype.includes = function() { 
     'use strict'; 
     return String.prototype.indexOf.apply(this, arguments) !== -1; 
    }; 
} 
+0

Đã phải hoán đổi các phiên bản '.includes()' của tôi cho khả năng tương thích với IE. Tôi đã thay đổi 'haystack.includes (kim)' thành 'haystack.indexOf (kim)! == -1' và nó hoạt động trên IE11. – KillahB

1

IE11 hiện thực hiện String.prototype.includes tại sao không sử dụng Polyfill chính thức?

Nguồn: ". Phải cây " polyfill source

if (!String.prototype.includes) { 
    String.prototype.includes = function(search, start) { 
     if (typeof start !== 'number') { 
     start = 0; 
     } 

     if (start + search.length > this.length) { 
     return false; 
     } else { 
     return this.indexOf(search, start) !== -1; 
     } 
    }; 
    } 
-1

Thêm một giải pháp là sử dụng chứa trong đó sẽ trở lại đúng hay sai

_.contains ($() css (" background-image "), "stage1")

Hope this helps

+0

Nếu tôi không sai, đây là một chức năng được cung cấp bởi thư viện underscorejs.Không có anh ta đã sử dụng này, nó sẽ là một sự lãng phí để bao gồm toàn bộ một thư viện chỉ cho polyfill này. –

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