web-dev-qa-db-ja.com

includes()すべてのブラウザーで機能しない

ここに私のコードのブロックがあります。 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)"
        })
    }
}

私はそれを少し変更してVanilla JSを使用し、次のことを行うことができます:

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

しかし、JSを変更してHTMLとCSSを編集する前に、IEで機能させる方法があるかどうかを確認したいと思います。

35
Christian4423

includes() のドキュメントを見ると、ほとんどのブラウザはこのプロパティをサポートしていません。

indexOf()を使用してプロパティを文字列に変換した後、広くサポートされているtoString()を使用できます。

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

MDN からポリフィルを使用することもできます。

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

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

私の場合、「string.search」を使用した方が良いとわかりました。

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

誰かに役立つ場合に。

0
César León