与 jQuery.noConflict() 冲突

Conflict with jQuery.noConflict()

对于我的生活,我无法弄清楚如何让 jQuery.noConflict() 工作来解决因我的网站上需要两个不同版本的 jQuery 而引起的问题。我已经在网上阅读了很多文章,也阅读了其他人在这个网站上的问题和答案,但似乎没有任何效果,而且我也不知道为什么,尽管我的情况与我读过的其他人有点不同。

让我试着解释一下我的情况和我尝试过的方法。我有几个不同的插件需要 jQuery 1.4.2 并且无法使用更高版本。我有一个使用较新版本 jQuery 1.7.1 的插件。较旧的插件和一个较新的插件需要一个 $(document).ready( function() 来初始化。我觉得这就是我的问题所在。看来我需要有 2 个 $(document) 实例。 ready( function(),每个都使用不同的 jQuery 库,但我不确定如何执行此操作。(这是我所说的部分使我的情况与我遇到的其他人有点不同阅读。)

这是基本设置:

    <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="js/plugin1.js"></script>
    <script type="text/javascript" src="js/plugin2.js"></script>
    <script type="text/javascript" src="js/plugin3.js"></script>

    <script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
    <script type="text/javascript" src="js/plugin4.js"></script>

现在我需要一个 $(document).ready(function() 来初始化和启动插件。因为 plugin1、plugin2 和 plugin3 使用 jQuery 1.4.2,而 plugin4 需要 jQuery 1.7.1,我认为我需要使用 $(document).ready(function() 的两个不同实例。首先我尝试了这种方法,一些网站将其描述为使用 noConflict() 的正确方法:

    <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
    <script>var jQuery1 = jQuery.noConflict( true );</script>
    <script type="text/javascript" src="js/plugin1.js"></script>
    <script type="text/javascript" src="js/plugin2.js"></script>
    <script type="text/javascript" src="js/plugin3.js"></script>

    <script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
    <script>var jQuery2 = jQuery.noConflict( true );</script>
    <script type="text/javascript" src="js/plugin4.js"></script>

    jQuery1(document).ready( function(){
      // initialize plugins 1, 2, and 3 here using jQuery1 instead of $
    });

    jQuery2(document).ready( function(){
      // initialize plugin 4 here using jQuery2 instead of $
    });

单靠这种方法是行不通的。然后我进入 plugin4.js 并将 $ 的所有实例更改为 jQuery2。那也没有用。我试过没有布尔值 true 的 noConflict。没用。谁能告诉我我做错了什么?我是否需要进入 plugin1.js、plugin2.js 和 plugin3.js 并将 $ 的所有实例更改为 jQuery1?我不是 100% 了解 noConflict() 的工作原理,所以我不确定这是否有必要。但是,我希望我不必这样做,因为 plugin3.js 已被混淆,所以无论如何我都做不到。如果有人可以提供帮助,将不胜感激。

我不认为你真的想在这里使用 noConflict,因为插件都需要访问 jQuery。您只需要 运行 以正确的顺序排列所有内容,并保留对加载的 jQuery 版本的引用。

此外,ready 事件处理程序会传递对 jQuery 的引用,因此您可以随意命名它(最好是 $)。

<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
<script>var jQuery1 = jQuery;</script>
<script type="text/javascript" src="js/plugin1.js"></script>
<script type="text/javascript" src="js/plugin2.js"></script>
<script type="text/javascript" src="js/plugin3.js"></script>

<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
<script>var jQuery2 = jQuery;</script>
<script type="text/javascript" src="js/plugin4.js"></script>

<script>
   jQuery1(function($){
      // initialize plugins 1, 2, and 3 here using $
   });

   jQuery2(function($){
      // initialize plugin 4 here using $
   });
</script>