0

RailsアプリでPrototypeとjQueryの競合を解消しようとしています。jQueryがPrototypeをアプリにうまく取り入れていることを発見しました。

$jq = jQuery.noConflict();application.jsファイルに追加してプロセスを開始しました。

次に、プロジェクト内のすべての.erbファイルと.jsファイルを調べて、へのjQuery呼び出しを探し、$それらを.に置き換えました$jq。次に、いくつかのjQueryプラグインファイルにアクセスしました。

jQueryプラグインの.jsファイル内のすべての$参照を変換する必要がありますか?$jq

4

5 に答える 5

2

今日、この問題に遭遇し、次のようなプラグイン コードをラップしました。

(function($) {
  //plugin code
})(jQuery);

プロトタイプライブラリファイルを含む行をjQueryライブラリファイルを含む行の前に移動するまで機能しませんでした。

于 2012-11-01T16:03:07.937 に答える
1

プロトタイプライブラリのjsファイルに追加することを検討しましたか?そうすれば、プロトタイプがロードされるたびに、jqueryの競合が自動的に解消されます。

ここでもmootoolsで同様のことをしました。

あなたの質問に答えて、プラグインが正しく書かれていれば、そこでこれを変更する必要はありません。次の規則でプラグインをラップし、競合がオンになっていない場合でも正しい動作を保証する必要があります。

;(function($) {

//plugin code

})(jQuery);
于 2009-12-15T14:28:37.370 に答える
1

または、クロージャーでそれらを包むことができます

(function($){

// add old jQuery code here.

})($jq);
于 2009-12-15T14:32:21.357 に答える
1

jQuery プラグインの .js ファイルで、すべての $ 参照を $jq に変換する必要がありますか?

一般的に、いいえ。ほとんどのプラグインは、jQuery オブジェクトを $. プラグインがこれを行うかどうかは、次のようになるため、わかります。

(function($) {

// Actual plugin code

})(jQuery);
于 2009-12-15T14:32:32.667 に答える
0

jQuery とそのすべてのプラグインを一緒に順番にロードしてから、noConflict()を呼び出してみてください。次に例を示します。

<script src="/path/to/1.3.1/jquery-1.3.1.min.js" type="text/javascript"></script>
<script src="/path/to/1.3.1/jquery-ui-1.6rc6.min.js" type="text/javascript"></script>
<script src="/path/to/jquery/plugin.js" type="text/javascript"></script>
<script type="text/javascript">
    var $jq = $jq || {};
    $jq.jQuery = jQuery.noConflict(true);
</script>

その後、独自のコードで $jq.jQuery 変数を使用して、必要なプラグインを備えた jQ を参照できます。

于 2009-12-15T16:31:58.807 に答える