IE 7 8ブラウザでは、TRIM()属性を使用してスペースを削除すると、エラーが報告されます。
したがって、この問題には次の解決策があります。
var aa = $( "#id")。val()。trim()--- trim()メソッドはIEで解析できません
解決:
[var aa = $ .trim($( "#id")。val()); ]これは簡単ではないので、以下に紹介したものを使用してください。最初のものはテストされました。
W3Cの人々のグループはロバによって頭を蹴られ、Javaスクリプト1.8.1までTrim機能(およびTrimleft、Trimright)をサポートしませんでした。残念ながら、Firefox3.5だけがそれをサポートしています。文字列の両側に空白を除去することはあまりにも一般的であるため、すべての主要なライブラリには独自の影があります。さらに、外国人は多くの研究エネルギーを持っており、多くの成果を上げています。
1 OKを実装します。 (これをJSに書いてから、スペースを直接削除する文字列に従ってください。Trim())
コードコピーは次のとおりです。
string.prototype.trim = function(){
return this .replace(/^/s/s*/、 '').replace(// s/s*$/、 '');
}
見た目はあまり良くなく、2つの定期的な代替品を使用しました。主にブラウザの内部最適化により、実際の速度は驚くべきものです。弦のスプライシングの有名な例である直接追加は、配列で作られた弦楽器よりも高速です。 Base2クラスライブラリは、この実装を適用します。
実装2
コードコピーは次のとおりです。
string.prototype.trim = function(){
return this .replace(/^/s/、 '').replace(// s $/、 '');
}
実装1と非常によく似ていますが、少し遅いです。主な理由は、最初に少なくとも1つの白人があると想定していることです。 prototype.jsはこの実装を使用しますが、その名前はストリップです。なぜなら、プロトタイプの方法はRubyで名前を変更しようとするからです。
実装3
コードコピーは次のとおりです。
string.prototype.trim = function(){
これをretur.substring(math.max(this .search(// s/)、0)、this .search(// s/s*$/)1);
}
空白部分は、(もちろん、真ん中で開催されるホワイトスペースの文字が許可されている)傍受によって取得され、合計4つのネイティブメソッドが呼び出されます。プリセットは非常に賢く、サブストリングはパラメーターとして2つの数値を取ります。 Math.Maxは2つの数値をパラメーターとして使用し、検索は1つの数値に戻ります。速度はトップ2よりも少し遅いですが、底よりもはるかに速いです。
実装4
コードコピーは次のとおりです。
string.prototype.trim = function(){
returnthis .replace(/^/s |/s $/g、 '');
}
これは、実装2の単純化されたバージョンと呼ぶことができます。これは、候補演算子を使用して2つの規則性を接続することです。しかし、そうすることで、ブラウザの最適化の機会を達成できません。これは実現ほど良くありません3。エレガントに見えるため、JQueryやMootoolsなどの多くのライブラリアプリケーション
実装5
コードコピーは次のとおりです。
string.prototype.trim = function(){
var str = this;
str = str.match(// s(?:/s/s)*/);
strを返しますか? str [0]: '';
}
一致はアレイに戻ることであり、元の文字列の要件を満たす部分がその要素になります。文字列の中央にある空白が切断されないようにするために、キャプチャ以外のグループ化(?:exp)を使用する必要があります。配列は空である可能性があるため、後でさらに判断する必要があります。ブラウザは、処理のグループ化において強力ではなく、1つの単語が遅いようです。基本的には全能ですが、ルールについて迷信しないでください。
実装6
コードコピーは次のとおりです。
string.prototype.trim = function(){
return this .replace(/^/s*(/s*(/s/s)*)/s*$/、 '$ 1');
}
必要な部品を提供し、空の文字列に入れます。しかし、特にIE6では、効率は非常に貧弱です。
実装7
コードコピーは次のとおりです。
string.prototype.trim = function(){
return this .replace(/^/s*(/s*(?:/s/s)*)/s*$/、 '$ 1');
}
実装6と非常によく似ていますが、キャプチャ以外のパケットを使用して利点を提供し、パフォーマンス効率がわずかに改善されます。
実装8
コードコピーは次のとおりです。
string.prototype.trim = function(){
return this .replace(/^/s*((?:[/s/s]*/s)?)/s*$/、 '$ 1');
}
上記の2つのアイデアを改善し、非キャプチャのグループ化とキャラクターセットを使用し、 *に置き換えました。特にIE6では、狂気を使用してこのパフォーマンスの改善を説明し、数秒でFirefoxを直接殺すことができます。
実装9
コードコピーは次のとおりです。
string.prototype.trim = function(){
return this .replace(/^/s*([/s/s]*?)/s*$/、 '$ 1');
}
今回、私はLazy Matchingを使用して、Firefoxで改善された非キャプチャグループ化を交換しましたが、IEは前回ほど狂っていませんでした。
実現10
コードコピーは次のとおりです。
string.prototype.trim = function(){
var str =これ、
whitespace = '/n/r/t/f/x0b/xa0/u2000/u2001/u2002/u2003/u2004/u2020 05/u2006/u2007/u2008/u2009/u200a/u200b/u2028/u2029/u3000';
for(var i = 0、len = str.length; i = 0; i-){
if(whitespace.indexof(str.charat(i))=== -1){
str = str.substring(0、i 1);
壊す;
}
}
whitespace.indexof(str.charat(0))=== -1を返しますか? str: '';
}
これを作成した人はもはや牛とは言われていないが、神と同じレベルにいると言いたいだけです。最初に考えられるすべての空白の文字をリストし、最初のトラバーサルで前面の空白を切り取り、2回目の後ろの空白を切り取ります。プロセス全体は、文字列を処理するために特別に設計されたネイティブ方法であるインデックスとサブストリングのみを使用し、規則性を適用しません。速度は驚くほど高速であり、内部バイナリ実装に近づくことが期待されており、IEとFirefoxで優れたパフォーマンスを持っています(もちろん、他のブラウザーは間違いなく)。さらに、速度はすべてゼロミリ秒です。
実装11
コードコピーは次のとおりです。
string.prototype.trim = function(){
var str =これ、
str = str.replace(/^/s/、 '');
for(var i = str.length-1; i> = 0; i-){
if(//s/.test(str.charat(i))){
str = str.substring(0、i 1);
壊す;
}
}
strを返します。
}
実装10によると、元々知られていない通常の文字列傍受方法は、ほぼ複雑ですが、通常の交換よりもはるかに優れていることがわかりました。しかし、規則性がそれほど複雑でない限り、ブラウザを使用して規則性を最適化してプログラムの実行効率を改善し、IEで8パフォーマンスを達成できます。ホワイトスペースの実装は長すぎて覚えにくいので、誰もがプロジェクトに実装10を適用するとは思いません(もちろん、クラスライブラリを構築している場合は、間違いなく開始されます)。 11を実装すると、その改良バージョンと言えます。正面のブランクは、定期的な交換により遮断されます。それらは後でネイティブの方法で扱われます。効果は元のバージョンよりも劣っていませんが、速度は驚くべきものです。
12を実装します
コードコピーは次のとおりです。
string.prototype.trim = function(){
var str =これ、
str = str.replace(/^/s/s*/、 '')、
ws = // s/、
i = str.length;
while(ws.test(str.charat( - i)));
str.slice(0、i 1)を返します。
}
実装10と実装11のより良い改善バージョンが書かれています。パフォーマンス速度ではなく、メモリとアプリケーションの容易さに関するものであることに注意してください。さらに、2つの前任者はゼロミリ秒です。さらに、これを使用して、将来的に人々を怖がらせます。
以下は、外国人によって与えられた比較結果です。実行の背景は、この記事でトリム操作を実行することです(27,600文字以上)。
Firefox 2 IE 6を実装します
TRIM1 15ms TRIM2 31MS TRIM3 46ms 31ms
TRIM4 47ms 46ms
TRIM5 156ms 1656ms
TRIM6 172MS 2406ms
TRIM7 172MS 1640ms
TRIM8 281MS TRIM9 125ms 78ms
TRIM10 TRIM11 TRIM112トリム機能の実装は、独自のアイデアを明らかにします。元の著者が言ったことを理解したい場合は、元のテキストを読んでください。
現在、JSでスペースを削除するための12の方法があります。
実装1
string.prototype.trim = function(){return this.replace(/^//s/s*/、 '').replace(// s/s*$/、 ''); }
実装2
string.prototype.trim = function(){return this.replace(/^/s+/、 '').replace(// s+$/、 ''); }
実装3
string.prototype.trim = function(){return this.s string(math.max(this.search(// s/)、0)、this.search(// s/s*$/) + 1); }
実装4
string.prototype.trim = function(){return this.replace(/^/s+|/s+$/g、 ''); }
string.prototype.trim = function(){var str = this; str = str.match(// s+(?:/s+/s+)*/); strを返しますか? str [0]: ''; }
string.prototype.trim = function(){return this.replace(/^/s*(/s*(/s+/s+)*)/s*$/、 '$ 1'); }
実装7
string.prototype.trim = function(){return this.replace(/^/s*(/s*(?:/s+/s+)*)/s*$/、 '$ 1'); }
string.prototype.trim = function(){return this.replace(/^/s*((?:[/s/s]*/s)?)/s*$/、 '$ 1'); }
string.prototype.trim = function(){return this.replace(/^/s*([/s/s]*?)/s*$/、 '$ 1'); }
string.prototype.trim = function(){var str = this、whitespace = ' /n/r/t/f/x0b/xa0/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/? for(var i = 0、len = str.length; i <len; i ++){if(whitespace.indexof(str.charat(i))=== -1){str = str.s string(i);壊す; }} for(i = str.length -1; i> = 0; i--){if(whitespace.indexof(str.charat(i))=== -1){str = str.s string(0、i + 1);壊す; }} whitespace.indexof(str.charat(0))=== -1を返しますか? str: ''; }
実装11
string.prototype.trim = function(){var str = this、str = str.replace(/^/s+/、 ''); for(var i = str.length-1; i> = 0; i--){if(//s/.test(str.charat(i)){str = str.s string(0、i + 1);壊す; }} return str; }
12を実装します
string.prototype.trim = function(){var str = this、str = str.replace(/^/s/s*/、 '')、ws = // s/、i = str.length; while(ws.test(str.charat( - i))); Return Str.slice(0、i + 1); }
見た目はあまり良くなく、2つの定期的な交換品を使用しましたが、主にブラウザの内部最適化により、実際の速度は驚くべきものです。文字列スプライシングの有名な例。これは、stringb?rが配列で作られているよりも高速です。 Base2クラスライブラリは、この実装を使用します。
実装1に非常に似ていますが、主に少なくとも1つの空白があることを最初に想定しているためです。 Prototype.jsはこの実装を使用しますが、その名前はStripです。これは、プロトタイプメソッドがR yと同じ名前を持つように努めているためです。
空白の部分は、(もちろん、真ん中で開催されるホワイトスペースの文字が許可されている)傍受によって取得され、合計4つのネイティブ方法が呼び出されます。非常に巧妙に設計されており、S Stringはパラメーターとして2つの数値を取ります。 Math.maxは2つの数値をパラメーターとして取得し、検索は数値を返します。速度は上記の2つよりも少し遅いが、以下のほとんどよりも速い。
これは、実装2の単純化されたバージョンと呼ぶことができます。これは、候補演算子を使用して2つのルールを接続することです。しかし、そうすることで、ブラウザを最適化する機会が失われます。これは実現ほど良くありません3。
実装5
一致は配列を返すため、要件を満たす元の文字列の一部がその要素になります。文字列の中央にある空白が除外されないようにするには、非キャプチャグループ(?:exp)を使用する必要があります。配列は空である可能性があるため、後でさらに判断する必要があります。ブラウザはグループ化の処理が弱く、1つの単語が遅いようです。基本的には全能ですが、ルールについて迷信しないでください。
実装6
必要な部品を提供し、空の文字列に入れます。しかし、特にIE6では、効率は非常に貧弱です。
実装6と非常によく似ていますが、キャプチャ以外のパケットを使用して利点を提供し、パフォーマンス効率がわずかに改善されます。
実装8
上記の2つのアイデアを改善し、非キャプチャのグループ化とキャラクターセットを使用し、 *に置き換えました。これは非常に驚くべきことでした。特にIE6では、狂気を使用してこのパフォーマンスの改善を説明し、数秒でFirefoxを直接殺すことができます。
実装9
今回、私はLazy Matchingを使用して、Firefoxで改善された非キャプチャグループ化を交換しましたが、IEは前回ほど狂っていませんでした。
実現10
これを作成した人はもはや牛とは言われていないが、神と同じレベルにいると言いたいだけです。最初に考えられるすべてのブランクをリストし、最初のトラバーサルで前面のブランクを切り取り、2回目は背中のブランクを切り取ります。プロセス全体では、文字列を処理するために特別に設計されたネイティブメソッドであるIndexOFとS Stringのみを使用し、規則性を使用しません。速度は驚くほど高速で、おそらく内部のバイナリ実装に近く、IEとFirefoxで優れたパフォーマンスを持っています(もちろん、他のブラウザは間違いなくです)。速度はすべてゼロミリ秒です。
実装10によると、通常のネイティブストリングインターセプト方法は、ほぼ複雑ですが、通常の交換よりもはるかに優れていることがわかりました。しかし、規則性がそれほど複雑でない限り、ブラウザを使用して規則性を最適化して、IEで8パフォーマンスを達成するなど、プログラムの実行効率を改善できます。ホワイトスパースの実装は長すぎて覚えにくいので、誰もがプロジェクトに実装10を適用するとは思わない(もちろん、クラスライブラリを構築する場合は、間違いなく最初のものです)。 11を実装すると、その改良バージョンと言えます。最初の部分のブランクは定期的な交換により遮断され、後の処理はネイティブの方法によって行われます。効果は元のバージョンよりも劣っていませんが、速度は非常に驚くべきものです。
実装10と実装11のライティング方法のより良い改善バージョンは、パフォーマンス速度ではなく、簡単なメモリと使用に関するものです。そして、その2つの前任者はゼロミリ秒レベルにあるので、私はこれを使用して、将来機能し、怖がっています。