フロントエンドの開発は、このようなライブラリーとプロトタイプの競合として競合jQueryライブラリと他のライブラリの場面に遭遇することは容易です。
実際には、この対立は理由原因$識別子の制御のためのさまざまなサードパーティ製のJSライブラリスクランブルです。
ソリューションは、他のスクリプトが競合を起こすことなく、$識別子を使用できるように、$識別子の放出を制御するためにjQuery.noConflict jQueryの提供()メソッドを使用することです。
より、jQuery.noConfilict()メソッドはjQueryのへの参照を返し、変数に格納され、この参照に戻ることができ、あなたが提供するメソッドまたはオブジェクトjQueryライブラリを呼び出すために、この変数を使用することができます。
jQueryの競合の複数のバージョンを持つページ
<! - 引入1.6.4版的JQ - > < スクリプトSRC = "http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.js" > </ スクリプト> < スクリプト> VAR jq164 = jQuery.noConflict(真)。</ スクリプト> <! - 引入1.4.2版的JQ - > < スクリプトSRC = "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js" > </ スクリプト> < スクリプト> VAR jq142 = jQuery.noConflict(真の);スクリプト> < スクリプト> (関数($){ // この場合$ -1.6.4はjQueryのである $(' #' ); })(jq164); </ スクリプト> < スクリプト> jq142(関数($){ // この場合、$ -1.4.2はjQueryのである $(' #' ); }); </ スクリプト>
別のライブラリの後に紛争へのリードにjQueryライブラリ
1.はまた$ jQueryのjQueryを使用した完全修飾名と略記します
JS、フルネームを呼び出すことはできません。jQueryの(関数(){ // jQueryを使用しない のjQueryを(" P " ).click(関数{() アラート(jQueryの(この)の.text()); ;}) }); // $はもはやこの場合、$の代表で、書き込むことができる場合prototype.jsの定義されたシンボル$ $(" PP " ).style.display = ' なし' ; //はプロトタイプを使用 </ スクリプト>
2.ショートカット(エイリアス)をカスタマイズ
< スクリプトタイプ= "テキスト/ JavaScriptを" > のvar $のJ = jQuery.noConflict(); // カスタム短いショートカット の$ J(関数(){ // jQueryの使用 $ J(" P " ).clickを(関数(){ アラート($ J(本)の.text()); }); }); $(" PP " ).style.display = ' なし' ; // 使用プロトタイプ </ スクリプト>
3.パラメータの関数として$記号が内部に渡します
< スクリプトタイプ= "テキスト/ JavaScriptを" > jQuery.noConflict(); // prototype.jsのに転送制御記号$ jQueryの(ドキュメント).ready(関数($){ $(" P " ).click (関数(){ //は$記号使用し続ける アラート($(この)の.text()); ;}) }); // 以下 のjQuery(関数($){ // jQueryの使用 $(" P " )を.clickは(関数(){ // $記号を使用し続けて アラートを($(この)の.text())。 }); }); </ スクリプト>
< スクリプトタイプ= "テキスト/ JavaScriptを" > jQuery.noConflict(); // prototype.jsのに転送制御記号$ (関数($){ // $に設定匿名関数およびパラメータ定義 $を(関数(){ // 匿名内部関数$ jQueryのある $(" P " ).click(関数(){ // 続ける$方法 アラート($(この)の.text()); }); }); })(jQueryの); // 匿名関数の引数を実行するとjQuery通過 $(" PP " ).style.display =を 'なし" ; // プロトタイプを使用する </ スクリプト>
紛争へのjQueryライブラリは他のライブラリの前にトリガ
他のライブラリをインポートする前に、jQueryライブラリ、すべての最後尾を行く$デフォルトJavaScriptライブラリの所有権。あなたは、いくつかの作業を行うには、[直接] jQueryのjQueryのを使用することができます。
あなたが他のライブラリへのショートカットとして$()メソッドを使用することができ、同時に、jQuery.noConflict()関数を呼び出す必要はありません。
<! - jQueryの導入 - > < スクリプトSRC = "../../スクリプト/ jquery.js" タイプ= "テキスト/ JavaScriptを" > </ スクリプト> <! - プロトタイプの紹介 - > < スクリプトSRC = "LIB / prototype.jsの" タイプ= "テキスト/ JavaScriptを" > </ スクリプト> < ボディ> < P ID = "PP" >テストプロトタイプ(非表示にする)</ P > < P >試験のjQuery(あなたは)クリックイベントをバインドされます</ P > < スクリプトタイプ= "テキスト/ JavaScriptを" > jQueryの(関数(){ // 直接jQueryの、 "jQuery.noConflict()"の関数を呼び出す必要がない のjQuery(" P " ).click(関数(){ アラート(jQueryの(この)。テキスト()); }); }); $(" PP " ).style.display = ' なし' ; // プロトタイプ使用 </ スクリプト> </ ボディ>
jQuery.noConflict()原則
この方法の原理は、ソースコードを見ることで知ることができるようになります。
VAR // 地図のjQueryの上に上書きした場合の _jQuery = window.jQuery、 // 上書きの場合は$を超える地図 _ $ = ウィンドウ$、。 jQuery.extend({ noConflict:機能(深い){ 場合。(ウィンドウ$ === jQueryの){ ウィンドウ$。 = $ _; } もし(深い&& window.jQuery === jQueryの){ window.jQuery = _jQuery; } 戻りのjQueryを; } })。
まず、jQueryの負荷、事前に宣言した_jQuery変数によって、現在のwindow.jQueryへのアクセス、$現在のウィンドウを得る。$ _によって。
次いで、jQuery.extend()は以下noConflictのjQueryに取り付けられています。だから我々はjQuery.noConflict()などのメモを呼んでいます。
その後、あなたはnoConflict()を呼び出すと2つの判断を行っ。もしnoConflictにおける第決意()パラメータ通過時間クロスjQueryのを制御するために、第一の制御クロス$アウトかどうかを決定します。
最後に、noConflict()はjQueryのを制御する必要がありますパラメータパラメータを受信するjQueryオブジェクトを返します。
「私は何を献身終わりには知らない、私はちょうど私が自分自身にハードしてきた知っています。」