4

次のような競合のないバージョンのjQueryを実行しているとします。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script><script type="text/javascript">var jQuery191 = $.noConflict(true);</script>

また、競合のないバージョンで実行する必要のある外部.jsファイルがあり、スクリプトの下部にjQuery191のjQueryオブジェクトが含まれていました。(jQuery)

.jsファイルをに含めて、getScript()競合のないjQueryオブジェクトを使用して実行した場合:

(function (jQuery) {
    $.getScript("js.js");
})(window.jQuery191)

jQuery191スクリプトは元のスクリプトと一緒に実行されますか、それとも元のスクリプトと一緒に実行されjQueryますか?それとも、このロジックはばかげていますか。

4

2 に答える 2

2

getScriptスクリプトをロードしてページに追加するだけで、スクリプトの動作にはまったく影響しません。スクリプトがグローバル名でjQueryにアクセスする場合、スクリプトは(呼び出されているために)それを見つけることnoConflictができず、正しく実行できません。

可能であれば、呼び出すnoConflictにスクリプトを含めることをお勧めします。そうしないと、スクリプトを変更して、配置した場所でjQueryを探す必要があります(jQuery191)。

于 2013-03-08T22:36:22.537 に答える
0

ラッパー((function() { ... })())内で、変数をグローバルスコープ内jQueryの変数のコピーに定義します。jQuery191

つまり$.getScript、その変数は使用されませんが、呼び出しjQuery.getScriptは機能します。これは無名関数であるため$、ラッパーの内側は外側の$変数(この場合$はグローバルオブジェクト内)を参照するようになりました。これを解決するには、ラッパーの最初のパラメーターの名前を次のように変更します$

(function ($) {
    $.getScript('foo.js');
})(window.jQuery191);

または、これをラッパーに追加します。

var $ = jQuery

これで、との両方$にグローバルスコープの変数のjQueryコピーが含まれます。jQuery191

于 2013-03-08T22:35:46.263 に答える