IE 7 および 8 ブラウザでは、trim() 属性を使用してスペースを削除すると、エラーが報告されます。
したがって、この問題を解決するには次の解決策があります:
var aa = $("#id").val().trim() --- Trim() メソッドは IE
では解析できません解決策:
[ var aa = $.trim($("#id").val()); これは使いにくいので、以下で紹介するものを使用してください。
W3C の人々の頭はロバに蹴られました。トリム関数 (trimLeft、trimRight) がサポートされたのは JavaScript 1.8.1 まででした。残念ながら、現在は Firefox 3.5 のみがサポートしています。文字列の両側の空白を削除することは非常に一般的であるため、すべての主要なライブラリに含まれています。また、外国人の研究は非常に精力的で、かなりの数の実装を行っています。
1 OK を達成します。 (これを js で記述し、スペースを削除したい文字列の直後に .trim() を続けます)
String.prototype.trim = function () {
これを返す .replace(/^ss*/, '' ).replace(/ss*$/, '' );
}
見た目はあまり良くありませんが、通常の置換を 2 つ使用しています。主にブラウザの内部最適化により、実際の速度は驚くべきものになります。有名な例は文字列の結合です。Array で作成した StringBuffer よりも直接加算した方が高速です。 Base2 クラス ライブラリはこの実装を使用します。
実装 2
String.prototype.trim = function () {
これを返す .replace(/^s /, '' ).replace(/s $/, '' );
}
は実装 1 と非常に似ていますが、主に少なくとも 1 つの空白文字があることを最初に前提としているため、わずかに遅くなります。 Prototype.js はこの実装を使用しますが、Prototype のメソッドは Ruby と同じ名前を持つように努めているため、その名前はstrip です。
3 を達成する
String.prototype.trim = function () {
returnthis .substring(Math.max( this .search(/S/), 0), this .search(/Ss*$/) 1);
}
空白部分をインターセプトで取得し(もちろん途中の空白文字も可)、合計4つのネイティブメソッドが呼び出されます。デフォルトは非常に賢明で、substring はパラメータとして 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 )*/);
return str ? str[0] : '' ;
}
match は配列を返すため、要件を満たす元の文字列の部分がその要素になります。文字列の途中にある空白文字が削除されないようにするには、非キャプチャ グループ化 (?: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*((?:[Ss]*S)?)s*$/, '$1' );
}
上記の 2 つのアイデアに従って、非キャプチャ グループと文字セットを使用し、* の代わりに ? を使用することで改善されました。特に IE6 におけるこのパフォーマンス向上は、Firefox を直接破壊する狂気の沙汰と言えるでしょう。
実装 9
String.prototype.trim = function () {
return this .replace(/^s*([Ss]*?)s*$/, '$1' );
}
今回は、非キャプチャ グループを置き換えるために遅延マッチングが使用されます。これは Firefox で改善されており、前回ほどクレイジーではありません。
10 を達成
String.prototype.trim = function () {
var str = this ,
whitespace = ' nrtfx0bxa0u2000u2001u2002u2003u2004u20 05u2006u2007u2008u2009u200au200bu2028u2029 u3000' ;
for ( var i = 0,len = str.length; i = 0; i--) {
if ( whitespace.indexOf (str.charAt(i)) === -1) {
str = str.substring(0, i 1);
break ;
}
}
return whitespace.indexOf (str.charAt(0)) === -1 ? str : '' ;
}
言いたいのは、これを作った人はもはや牛とは言えず、すでに神のレベルに達しているということです。まず、考えられるすべての空白文字をリストし、最初の走査で先頭の空白を切り取り、2 番目のパスで後続の空白を切り取ります。プロセス全体では、文字列を処理するために特別に設計されたネイティブ メソッドである、indexOf と substring のみを使用し、通常のルールは使用しません。速度は驚くほど速く、内部バイナリ実装に近い速度であることが期待されており、IE と Firefox (もちろん他のブラウザでも) で優れたパフォーマンスを発揮します。速度はゼロミリ秒です。
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.substring(0, i 1);
break ;
}
}
return str;
}
実装 10 は、少し複雑ではありますが、通常の未知の文字列インターセプト方法が通常の置換よりもはるかに優れていることを示しています。ただし、正規表現が複雑すぎない限り、ブラウザの正規表現の最適化を使用してプログラムの実行効率を向上させ、IE で 8 のパフォーマンスを達成できます。空白の実装は長すぎて覚えるのが難しいため、通常は誰も実装 10 をプロジェクトで使用しないと思います (もちろん、クラス ライブラリを構築している場合は、間違いなく最初の実装です)。 Implementation 11 は改良版と言えます。前部のブランクは定期的な置き換えによってカットされ、後部はネイティブな方法で処理されます。効果はオリジナル バージョンに劣りませんが、速度は非常に驚異的です。 。
12 を達成
String.prototype.trim = function () {
var str = this ,
str = str.replace(/^ss*/, '' ),
ws = /s/,
i = str.length;
while (ws.test(str.charAt(--i)));
return str.slice(0, i 1);
}
实现10与实现11在写法上更好的改进版,注意说的不是性能速度,而是易记与施用上。和它的两个先辈都是零毫秒级另外,以后就用这个来工作与吓人。
下面是老外给出的比力结果,执行背景是对Magna Carta 这文章(超过27,600字符)进行trim操作。
实现 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 trim12 trim函数实现揭晓自己的想法,想懂得原作者说什么请看原文。
JS 去除空格的方法目前共有12种:
实现1
String.prototype.trim = function() { return this.replace(/^ss*/, '' ).replace(/ss*$/, ''); }
实现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(/Ss*$/ )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[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*((?:[Ss]*S)?)s*$/, '$1'); }
String.prototype.trim = function() { return this.replace(/^s*([Ss]*?)s*$/, '$1'); }
String.prototype.trim = function() { var str = this,whitespace = ' nrtfx0bxa0??????????????? '; for (var i = 0,len = str.length; i
实现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) );壊す;文字列を返します。 }
实现12
String.prototype.trim = function() { var str = this, str = str.replace(/^ss*/, ''), ws = /s/, i = str.長さ; while (ws.test(str.charAt(--i))); str.slice(0, i 1) を返します。 }
は、2 回の正しい置換を使用して実行され、非常に高速で、主にデバイスの内部拡張から利益を得ています。
と、実際の 1 はほぼ似ていますが、最も遅いのは、最初に少なくとも 1 つの空白文字が存在するように設計されていることが主な原因です。
は、プロトタイプの方法がすべて R y と同じ名前であるため、空白部分を取得し (当然、途中に空白が存在することは許可されます)、4 つの生成方法を共通に使用します。設定は非常にうまく、文字列は 2 つの数字をパラメータとして使用します。Math.max は 2 つの数字をパラメータとして使用し、検索すると 1 つの数字が返されます。 >
これは、上実現 2 のバージョンと呼ばれるもので、適切な操作子を使用して 2 つの正規のものを接続するものです。 JQ ry と mootools
が一致すると、
の一致は 1 つの数値グループを返します。そのため、文字列結合要求の部分がその要素になります。中間の空白文字は除外され、非捕捉性のコンポーネント (?:exp) に使用する必要があります。数値グループは空の可能性があるため、後続の判定が行われます。
は、6 つの
によって要求された符号化部分が提供され、空文字列に配置されます。
と実現 6 は似ていますが、非キャプチャ ブロックが使用されるため、パフォーマンスが若干向上しています。上の 2 つの思考回路に沿って変更が加えられ、非キャプチャー パケットと文字セットが動作し、? が * に置き換えられ、非常に優れた効果が得られます。
は 9
を実行します。これは、捕捉されないコンポーネントの代わりに不使用のマッチングを使用して、火狐で改善が得られ、IE には次のような狂気はありません。
は 10
私がただ思うのは、この人はすでに牛の形をしているわけではなく、神のような階級でした。プロセス全体で、この文字列を処理する文字列である IndexOf を使用するだけで、内部で直接実行される 2 番目の方法が使用されません。
10 件の報告を達成するのは、私にとってごく一般的な原文の取得方法です。しかし、それが単純でない場合に限り、IE の表 8 に示すように、ブラウザーを使用してプログラムの実行効率を改善することもできます。空白があると非常に長くなりますので、当然のことながら(ある種類のグループを作成する場合は、そのペアが最初になります)。Implementation 11 は改良版と言えます。前部の空白は定期的な置き換えによってカットされ、後部はネイティブな方法で処理されます。効果は元のバージョンに劣りませんが、速度は非常に高速です。 。
実装 10 と実装 11 は、記述の点で優れており、改良されたバージョンです。これはパフォーマンスや速度に関するものではなく、記憶しやすさや使いやすさに関するものであることに注意してください。その 2 つの前任者はどちらもゼロミリ秒レベルであり、今後はこれを仕事や脅迫に使用します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール
