ここに私のコードのブロックがあります。 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で機能させる方法があるかどうかを確認したいと思います。
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;
};
}
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;
}
};
}
私の場合、「string.search」を使用した方が良いとわかりました。
var str = "Some very very very long string";
var n = str.search("very");
誰かに役立つ場合に。