与jQuery.noConflict()冲突

时间:2015-03-27 22:24:43

标签: javascript jquery conflicting-libraries

对于我的生活,我无法弄清楚如何让jQuery.noConflict()解决因在我的网站上需要两个不同版本的jQuery而导致的问题。我在网上阅读了大量文章,并在本网站上阅读了其他人的问题和答案,但似乎没有任何工作,我无法弄清楚为什么,尽管我的情况与其他人有点不同,我和# 39;读过。

让我试着解释一下我的情况以及我尝试过的事情。我有几个不同的插件需要jQuery 1.4.2,并且不能使用更高的任何东西。我有一个使用更新版本jQuery 1.7.1的插件。较旧的插件和一个较新的插件需要一个$(document).ready(function()来初始化。我感觉这就是我的麻烦所在。似乎我需要有2个$(文件)实例。 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已被混淆,所以我无论如何都无法做到。如果有人可以提供帮助,我们将不胜感激。

1 个答案:

答案 0 :(得分: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>