web-dev-qa-db-ja.com

startsWith in IE 11

IE 11は、文字列でstartsWithをサポートしていません。 ( こちらをご覧ください

メソッドをサポートするようにプロトタイプを追加するにはどうすればよいですか?

20
Sandah Aung

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つに追加するだけです。

47
jfriend00

これを修正する簡単な方法を見つけました、

function startsWith(str, Word) {
    return str.lastIndexOf(Word, 0) === 0;
}

以下のコードでendswithの使用を見つけるのが賢明です

function endsWith(str, Word) {
    return str.indexOf(Word, str.length - Word.length) !== -1;
}
2
tk_

これを使用できます。 「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'"); 
}
0
fatih

私はこのポリフィルを使用しています:

if (typeof String.prototype.startsWith != 'function') {
    String.prototype.startsWith = function(prefix) {
        return this.slice(0, prefix.length) == prefix;
    };
}
0
NuclearPeon