6

私は、thickbox のヘッダーで jQuery バージョン 1.2.2 を参照した HTML ドキュメントを持っています。後で</body>、画像スライドショー用のタグの直前で jQuery 1.7.1 を参照しました。

問題は、jQuery 1.7.1 の参照が削除され、スライドショーが機能しなくなるまで、thickbox が機能しないことです。

競合について調べるためにグーグルで検索しました$が、提案された解決策はどれも機能しませんでした。

私が見て試した最も一般的なものは次のとおりです。var $j = jQuery.noConflict();

どうすればこれを解決できますか?

4

5 に答える 5

2

プラグインが正常に動作している場合、これは機能するはずです

<script src="jquery-1.2.2.js"></script>
<script src="thickbox.js"></script>
<script src="jquery-1.7.1.js"></script>
<script src="slideshow.js"></script>

(明らかに、これらのスクリプト名は構成されています。)ソース)を示します(Googleは1.2.2をホストしていないため、jQuery1.4.2とjQuery1.7.1を使用しました)。

上記は、正常に動作するプラグインで機能します。これは、正常に動作するプラグインがグローバルにまったく依存せず、ロードされた時点のグローバル$の値を使用して、次に、クロージャーは、次のように、プラグインのコード全体でそのローカル参照を使用します。jQuery

// Example plug-in setup
(function($) {
    // ...Plug-in code using `$` here -- note it's a *local* `$`,
    // not the global `$`, and not the global `jQuery`...
})(jQuery);

また

(function() {
    var $ = jQuery;

    // ...Plug-in code using `$` here -- note it's a *local* `$`,
    // not the global `$`, and not the global `jQuery`...
})();

これらは両方とも、プラグインがロードされた時点でjQueryグローバル値を取得し、全体でローカルエイリアスを使用します。

プラグインがreadyイベントを待機する場合は、次のことも実行できます。

jQuery(function($) {
    // ...Plug-in code using `$` here -- note it's a *local* `$`,
    // not the global `$`, and not the global `jQuery`...
});

...readyハンドラーに渡されたjQuery関数を使用します。

上記のスクリプトのロード順序では、これら3つはいずれも正しく機能します(thickboxはjQuery 1.2.2を、スライドショーはjQuery 1.7.1を参照)。

しかし、私の冒頭の文の「if」は大きな「if」です。多くのプラグインは、このように防弾用に作成されていません。


上記にもかかわらず、動作するためにjQuery 1.2.2を必要とするプラグインから移行し、可能な限り(そしてほとんどの場合可能です)、jQueryを含むライブラリの2つの異なるバージョンをロードする必要を回避します。同じページ。

于 2012-09-11T12:22:27.433 に答える
2
<script src="http://code.jquery.com/jquery-1.2.2.min.js"></script>
<script type="text/javascript">
  var jQ122 = jQuery.noConflict();
</script>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
  var jQ171 = jQuery.noConflict();


  (function($) { 
    $(function() {
      // here $ is jQuery 1.2.2
    });
  })(jQ122);


  (function($) { 
    $(function() {
      // here $ is jQuery 1.7.1
    });
  })(jQ171);
</script>
于 2012-09-11T12:24:49.513 に答える
0

jQuery.noConflict();同時にjQueryの別々のバージョンを宣言するために使用することもできますが。

それを行うと、特定のライブラリでIE8に問題が発生することがよくあります。

したがって、別の解決策は、iframeを使用して現在のページ内にページを読み込むことです。

1つのページに特定のバージョンのjQueryを配置し、2番目のページに別のバージョンを配置します。

例えば:

<iframe frameborder="0" width="700" height ="400" scrolling="no" seamless="seamless" src="your.html"></iframe>
于 2012-09-14T22:12:27.670 に答える
0

あなたがしたいことは非常に悪い習慣です(あなたは確かにすべてのコードを同じバージョンに移行するべきです)が、それは理論的には行うことができます...

とにかくそれぞれのプラグインに変更を加える必要があります...このコードを検討してください:

<script src="jquery-1.4.js"></script>
var jQuery14 = jQuery;
<script src="jquery-1.7.js"></script>
var jQuery17 = jQuery;

次に、jQueryがプラグインに渡された時点でプラグインのコードを変更します。これは次のようになります。

(function( $ ){
     // all your plugins code would be here
})( jQuery );     // replace "jQuery" with one of your respective jQuery14/jQuery17 versions/variables

注意してください..これは控えめに言っても非常に厄介です!きれいなコードを書くか、後で支払います!:)

于 2012-09-11T12:28:05.377 に答える
0

2つの異なるバージョンのjQueryを使用することはお勧めしません。最新のjQueryで完全に機能するthickboxの代替手段がいくつかあります。

于 2012-09-11T12:24:30.473 に答える