与 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>
对于我的生活,我无法弄清楚如何让 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>