JSライブラリの競合の主な理由: jQueryライブラリは、多くのJSライブラリは、そのシンボルとして「$」記号を使用しています。したがって、JSライブラリ内の複数のページを導入し、これは、その代表者の私自身の解釈である(ライブラリを認識し、それを分析するために、深いjQueryのソースコードに移動する必要がある深い理由はありませんコード、として「$」を使用そのため、一時的に深ディスカッション・ペーパー)。
ソリューション:
完全に競合を解決するためのJSライブラリは、以下の方法に分けることができます。
使用jQueryのjQueryオブジェクト識別子(別名)として、識別子① '$' を転送します。
あるいは②別名「$」とjQueryの識別子、例えば以下$ Jとして(任意の名前を取ることができます)。
VaRの $ jを= jQuery.noConflict(); $ jの(。 "#div")非表示();
匿名関数を使用③
jQuery.noConflict() (関数($){ $(関数(){ // jQueryのエイリアスコード$として使用 );} })(jQueryの); ... // コード$別名他のライブラリと
ケース1:もし他の後のライブラリーにjQueryライブラリ
方法:この場合、どのように他のライブラリがjQuery.noConflict()jQueryの放出制御「$」の識別子を使用されるであろう識別子として「$」を使用するように、それは(「$」)は最初に道を譲りましたそのライブラリーの実現。
例えば:
ます。<script type = "text / JavaScriptの" SRC = "http://axdhxyzx.blog.163.com/blog/other_lib.js"> </ SCRIPT> <スクリプトタイプ= "テキスト/ JavaScriptを" SRC =「HTTP:/ /axdhxyzx.blog.163.com/blog/jquery.js "> </ SCRIPT> <スクリプトタイプ="テキスト/ JavaScriptを「> $ .noConflict(); // $その最初の実装ライブラリを転送します。 jQueryの( "#div")非表示();. // 識別子jQueryライブラリのjQueryとして使用 $( "#div")非表示();. // 別のライブラリコード$の使用 </ SCRIPT>
あなたはまた、すなわち、エイリアスを使用して、第二の方法を使用することができます。例えば:
ます。<script type = "text / JavaScriptの" SRC = "http://axdhxyzx.blog.163.com/blog/other_lib.js"> </ SCRIPT> <スクリプトタイプ= "テキスト/ JavaScriptを" SRC =「HTTP:/ /axdhxyzx.blog.163.com/blog/jquery.js "> </ SCRIPT> <スクリプトタイプ="テキスト/ JavaScriptを「> VAR noConflict $ $ J =(); // 最初の実装$を転送そのライブラリ。 $ jの( "#div")非表示();. // 識別子$ jのjQueryライブラリとして使用 $( "#div")非表示();. // 別のライブラリコード$の使用 </ SCRIPT>
または第三の方法、即ち、例えば使用無名関数:
jQuery.noConflict() (関数($){ // パラメータとして匿名関数'$'と $(関数(){ // jQueryのエイリアスコード$として使用 );} })(jQueryの); // jQueryのは、パラメータ値として渡された ... // エイリアスとして$で他のコードベースを
ケース2:あなたは、他の前にjQueryライブラリをインポートする場合
方法:この場合には、「$」識別子を転送するjQuery.noConflict()メソッドを使用しません。例えば:
ます。<script type = "text / JavaScriptの" SRC = "http://axdhxyzx.blog.163.com/blog/jquery.js"> </ SCRIPT> <スクリプトタイプ= "テキスト/ JavaScriptを" SRC =「HTTP:/ /axdhxyzx.blog.163.com/blog/other_lib.js "> </ SCRIPT> <スクリプトタイプ="テキスト/ JavaScriptを"> jQueryの( " #div「)非表示();. // jQueryライブラリのjQueryのように使用識別子 $( "#div")非表示();. // 別のライブラリコード$の使用 </ SCRIPT>
だからここに質問です:なぜ)(インポートライブラリjQuery.noConflictを使用する必要があります他のライブラリの前にjQuery.noConflictを()をインポートするためにはjQueryを使用して、他の後にする必要はないのですか?
さらに、jQuery.noConflict()メソッドはまた、ブール型パラメータを備えていてもよいです。アクションパラメータは次のとおりです。完全にjQueryの新しいネームスペースに(完全に別のオブジェクトで新しい名前空間へのjQueryを移動します。)
あなたはjQueryのポインティング新しいスペースを作成するために、ある同じページ、上のjQueryの異なるバージョンをインポートする必要がある場合、このパラメータは、使用のために主にあります。(これは非常にではありません明らか。)
例えば:
VaRの DOM = {}; dom.query = jQuery.noConflict(真の); 結果: dom.query( "のdiv P"。)非表示(); // 新しいjQueryのコード $( "コンテンツ")style.display。 = "なし"; // 別のライブラリの$()コード のjQuery( "div>のP-")非表示();. // jQueryのコードの別のバージョン
概要:jQueryの競合のためのJSライブラリは、私が唯一の解決方法を知っています。そして私は、理由の具体的な詳細を知らないと、次のステップは、解決策を見つけるための努力にあるように、特定の技術的な知識は、明確ではありません。jQueryライブラリの競合のために、私はまだ質問が残っています:
①なぜjQueryのインポート他のライブラリの前にjQuery.noConflict()を使用することなく、そして他の後にインポートライブラリをjQuery.noConflict()を使用する必要がありますか?
②同じページにjQueryライブラリの異なるバージョンの導入の決済に、解決するための詳細jQuery.noConflict(true)を使用して?(のような:?順序がなど、さまざまなソリューションにつながるかどうかのライブラリの導入)
③なぜ、同じページに複数のJSライブラリの導入は、エラー、どのような具体的な理由を引き起こすのでしょうか?
ます。https://www.cnblogs.com/JoannaQ/p/3387184.htmlで再現