web-dev-qa-db-fra.com

includes () ne fonctionne pas dans tous les navigateurs

voici un bloc de mon code. Cela fonctionne parfaitement dans Firefox et Chrome. Mais pas dans IE. J'ai l'erreur "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)"
        })
    }
}

Je pourrais changer un peu et utiliser Vanilla JS et faire:

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

Mais je préférerais voir s’il existe un moyen de le faire fonctionner dans IE avant de changer le JS et d’éditer le HTML et le CSS.

35
Christian4423

Si vous consultez la documentation de includes() , la plupart des navigateurs ne prennent pas en charge cette propriété.

Vous pouvez utiliser une fonction largement prise en charge indexOf() après la conversion de la propriété en chaîne à l'aide de toString():

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

Vous pouvez aussi utiliser le polyfill à partir de MDN .

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

IE11 implémente String.prototype.includes alors pourquoi ne pas utiliser le logiciel officiel Polyfill?

Source: source polyfill

  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;
      }
    };
  }
6
thiagoh

Dans mon cas, j'ai trouvé préférable d'utiliser "string.search".

var str = "Some very very very long string";
var n = str.search("very");

Au cas où cela serait utile pour quelqu'un.

0
César León