22

прямо здесь блок моего кода. Он отлично работает в fireFox и Chrome. Но не в IE. Я получаю ошибку «Object doesn't support property or method 'includes'»включает() не работает во всех браузерах

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)" 
     }) 
    } 
} 

я мог изменить его немного и использовать ванильный JS и сделать:

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

Но я предпочел бы видеть, если есть способ, чтобы получить его работать в IE до изменения JS и редактирования HTML и CSS.

+0

Я нахожу это странным, что Grea t leveler, jQueery, не позволяет довести все браузеры до самого низкого общего знаменателя - если 'include' не работает в IE, он не должен работать в любом браузере –

+0

[includes()] (https: //developer.mozilla .org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes) нестабильная функция в кросс-браузерах – Girish

+0

включает в себя не что-то общее с jQueery - вопрос неверен: p –

ответ

50

Если вы посмотрите на документацию includes(), большинство браузеров не поддерживают это свойство.

Вы можете использовать широкую поддержку indexOf() после преобразования собственности в строку с помощью toString():

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

Вы также можете использовать polyfill из MDN.

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

Пришлось поменять мои экземпляры '.includes()' для совместимости IE. Я изменил 'haystack.includes (needle)' на 'haystack.indexOf (игла)! == -1' и работает на IE11. – KillahB

1

IE11 реализует String.prototype.includes так почему бы не использовать официальный Polyfill?

Источник: «. Право-дерево " 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

Еще одно решение заключается в использовании содержит который будет возвращать истинным или ложным

_.contains ($() CSS (" фоновое изображение "), "stage1")

Надеется, что это помогает

+0

Если я не ошибаюсь, это функция, предоставляемая библиотекой underscorejs. Если он уже использует это, это будет пустой тратой, чтобы включить всю библиотеку только для этого полипол. –

 Смежные вопросы

  • Нет связанных вопросов^_^