jQuery と他のライブラリを同じページで使用する場合、グローバル名 $ の定義が最大の競合点と競合点になることがよくあります。 jQuery が $ を jQuery 名のエイリアスとして使用し、jQuery が公開するすべての機能に使用することはよく知られていますが、他のライブラリ、特に Prototype も $ 名を使用します。
1. jQuery は、$ 識別子の占有を放棄して他のライブラリが使用できるようにする $.noConflict() ユーティリティ関数を提供します。
この関数の構文は次のとおりです:
$.noConflict(jqueryToo)
識別子 $ の制御を他のライブラリに返し、jQuery をページ上の他のライブラリと混合できるようにします。関数が実行されたら、$identifier の代わりに jQuery 識別子
を使用して jQuery 関数を呼び出す必要があります。jQuery 識別子を削除することもできます (オプション)
このメソッドは、jQuery が組み込まれた後、競合するライブラリが組み込まれる前に呼び出す必要があります。
jQuery 識別子が使用されていますが、$ は jQuery のエイリアスであるため、$.noConflict() 適用後もすべての jQuery 関数が使用可能です。
var $j = jQuery;
2. もう 1 つの一般的な手法は、$ 識別子が jQuery オブジェクトを指すスコープ環境を作成することです。これは、特にプラグイン作成者にとって、jQuery を拡張する際の一般的な手法です。ページ開発者が $.noConflict() を呼び出したかどうかについての仮定はありません。もちろん、ページ開発者の希望を台無しにすることを避けるために、ページ開発者自身がこの関数を呼び出すことはできません。
このイディオムは次のとおりです:
(function($) { }) (jQuery);
(function($) { })
この部分は関数を宣言し、それを括弧で囲みます。これにより、この式の結果は匿名関数への参照になります。この関数は単一のパラメーターを想定し、関数本体内で $ という名前を付けます。関数に渡される値は、$ 識別子を通じて参照できます。パラメータ宣言はグローバル スコープ内の同様の名前付き識別子よりも優先されるため、関数の外で定義された $value は関数内で渡されたパラメータに置き換えられます。
(jQuery)
jQuery オブジェクトをパラメータとして渡し、匿名関数で関数呼び出しを実行します
$ 識別子が Prototype で定義されているか、関数の外部の他のライブラリで定義されているかに関係なく、常に関数本体内の jQuery オブジェクトを指します。
このトリックを使用する場合、外部で宣言された $ は関数本体内では使用できません。
3. 2 番目の使用法のバリエーションは、ready ハンドラー関数の宣言にもよく使用され、3 番目の構文
jQuery( function($){
})