如果你包含三个版本的jquery并且在中间包含一个使用jquery $对象的脚本会发生什么

时间:2013-01-26 00:32:24

标签: javascript jquery compilation interpreter

我遇到过一个问题,即我的多个插件在他们的jquery版本上存在冲突。现在我搜索了谷歌,我知道你应该最终只使用一个版本的jquery并将你的代码更新到该版本的jquery。但是,出于好奇,我很想知道当你执行以下操作时会发生什么:

<include latest jquery>
<include script that uses jquery>  <---and this jquery code is called back or triggered in some event handler function.. what happens then? what jquery $ version is used? the last jquery object that was added (the 'yet another version of jquery' )
<include some other version of jquery>
<include yet another version of jquery>

使用什么版本的jquery?为什么?究竟发生了什么,每个脚本的加载和执行是如何发生的?它只是调用最新的jquery的$别名?谢谢你的帮助。

3 个答案:

答案 0 :(得分:6)

你可以使用jQuery.noConflict()来拥有多个版本的jQuery。只有一个人会使用$。

例如

<script src='jquery-1.3.2.js'></script>
<script>
var jq132 = jQuery.noConflict();
</script>
<script src='jquery-1.4.2.js'></script>
<script>
var jq142 = jQuery.noConflict();
</script>

然后你可以使用jq142和jq132。更多详情http://api.jquery.com/jQuery.noConflict/

答案 1 :(得分:1)

当您包含jQuery时,它会覆盖jQuery变量。因此,你实际上可以做你正在做的事情,它应该可以正常工作,即使使用$

不这样做的原因是因为同时维护多个版本的软件并不是很有趣,你的客户端必须下载多个版本的jQuery,并且你有一个奇怪的依赖,你应该把你的一些JS代码放到哪里不在那儿。尽快修复此问题的来源(即使用一个版本)。

行动中:http://jsfiddle.net/AbAgu/

答案 2 :(得分:0)

这将取决于。脚本将按顺序加载和执行。在中间脚本中立即执行的任何代码都将使用顶部脚本中的jQuery。任何延迟到稍后的代码(例如,将由另一个脚本调用的函数定义,或嵌套在事件处理程序中的函数定义)将使用加载的最终版本。

如果这不是您想要的行为,您可以使用jQuery.noConflict(),尽管这可能涉及修改您正在使用的插件以使用正确的版本。