IE 11は、文字列でstartsWith
をサポートしていません。 ( こちらをご覧ください )
メソッドをサポートするようにプロトタイプを追加するにはどうすればよいですか?
MDNページ から直接、ここにポリフィルがあります:
_if (!String.prototype.startsWith) {
String.prototype.startsWith = function(searchString, position){
position = position || 0;
return this.substr(position, searchString.length) === searchString;
};
}
_
これはどのブラウザでも安全に使用できます。メソッドが既に存在する場合、このコードはそれを認識し、何もしません。メソッドが存在しない場合、すべての文字列で使用できるように、メソッドをStringプロトタイプに追加します。
これを、起動時に.startsWith()
を使用しようとする前に実行するJSファイルの1つに追加するだけです。
これを修正する簡単な方法を見つけました、
function startsWith(str, Word) {
return str.lastIndexOf(Word, 0) === 0;
}
以下のコードでendswithの使用を見つけるのが賢明です
function endsWith(str, Word) {
return str.indexOf(Word, str.length - Word.length) !== -1;
}
これを使用できます。 「Internet Explorer 11」およびほとんどの最新ブラウザーで動作します。このコードの利点の1つは、デフォルトの「startsWith」および「endsWith」が最新のブラウザーで機能する場合、それらの関数が機能することです。
function startsWith(str, prefix) {
if (str.length < prefix.length){
return false;
}
if(String.prototype.startsWith) {
return str.startsWith(prefix);
}
//return str.slice(0, prefix.length) == prefix;
return str.substring(0, prefix.length) === prefix;
}
function endsWith(str, suffix) {
if (str.length < suffix.length){
return false;
}
if(String.prototype.endsWith) {
return str.endsWith(suffix);
}
return str.substring(str.length - suffix.length, str.length) === suffix;
}
/* usage */
var myHtml = "<strong>This is html content</strong>";
var myString = "This is simlpe text for test";
if(startsWith(myHtml, "<strong>")){
console.log("start with <strong>");
}
if(startsWith(myString, 'This')){
console.log("start with 'This'");
}
if(endsWith(myHtml, "</strong>")){
console.log("ends with </strong>");
}
if(endsWith(myString, 'test')){
console.log("ends with 'test'");
}
私はこのポリフィルを使用しています:
if (typeof String.prototype.startsWith != 'function') {
String.prototype.startsWith = function(prefix) {
return this.slice(0, prefix.length) == prefix;
};
}