スタックに関する多くの質問で説明されているように、IE 8は.trim()
を受け入れませんが、jQueryフレームワークがそれを処理します。
そのバージョンのトリムを使用するように関数を変換する方法がわかりません(すでにjQueryを使用していると思っていました)。ここに私のコードがあります:
$('input').val(function(index, val){
return val.replace('Please Select', '').trim();
});
これは、ストリングを何も置き換えないように設計されています。
私はもう試した:
$('input').val(function(index, val){
return val.replace('Please Select', '')$.trim();
});
しかし、それは良くありませんでした。
$.trim(val.replace('Please Select', ''))
IE8にはネイティブのtrim
メソッドがありません。一般的には、プロトタイプを拡張するだけです。
_if (!String.prototype.trim)
{
String.prototype.trim = function()
{
return this.replace(/^\s+|\s+$/g,'');
};
}
_
これは文字列をトリムするための最短の正規表現ですが、.replace(/^\s\s*/,'').replace(/\s*\s$/,'')
は(わずかに)高速であると言われています...選択はあなた次第です
もちろん、本当にこれにjQueryを使用したい場合は、ターゲット文字列を呼び出されたメソッドのコンテキストにする必要があります(_$.trim
_は_$
_ === jQueryオブジェクトのメソッドを呼び出します) 、したがって、StringをjQオブジェクトにします。
_$(' foo bar ').trim();//returns "foo bar"
//compared to augmented prototype:
' foo bar '.trim();//returns "foo bar"
_
拡張プロトタイプの利点は、新しいjQueryオブジェクトを作成するための追加のオーバーヘッドがないことです。一方、prototype-approachの使用は、ネイティブのStringオブジェクトで文字列をラップしてメソッドを適用するためにJSに依存します。基本的に同じ操作ですが、jQueryはjQueryコンストラクター($()
)に渡された文字列に対して多数のチェックを行うため、shouldはわずかに効率的です。