0

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

让我试着解释一下我的情况以及我所做的尝试。我有几个不同的插件需要 jQuery 1.4.2 并且不能使用更高版本的插件。我有一个使用较新版本 jQuery 1.7.1 的插件。较旧的插件和一个较新的插件需要一个 $(document).ready( function() 来初始化。我觉得这就是我的麻烦所在。看来我需要有 2 个 $(document) 实例。准备好(函数(),每个都使用不同的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。那也没用。我试过没有布尔真值的 noConflict 。没用。谁能告诉我我做错了什么?我是否需要进入 plugin1.js、plugin2.js 和 plugin3.js 并将所有 $ 实例更改为 jQuery1?我不是 100% 了解 noConflict() 的工作原理,所以我不确定这是否有必要。但是,我希望我不必这样做,因为 plugin3.js 已被混淆,所以无论如何我都无法做到。如果有人可以提供帮助,将不胜感激。

4

1 回答 1

2

我不认为你真的想在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>
于 2015-03-27T22:30:07.913 回答