ソリューションjQueryライブラリと(例えば、プロトタイプのような)他のライブラリの競合

フロントエンドの開発は、このようなライブラリーとプロトタイプの競合として競合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オブジェクトを返します。

 

「私は何を献身終わりには知らない、私はちょうど私が自分自身にハードしてきた知っています。」

おすすめ

転載: www.cnblogs.com/yanggb/p/11128377.html