【问题标题】:what happens if you include three versions of jquery and have a script included in the middle that uses the jquery $ object如果您包含三个版本的 jquery 并在中间包含一个使用 jquery $ 对象的脚本会发生什么
【发布时间】:2013-01-26 00:32:23
【问题描述】:

我遇到了一个问题,我有多个插件在他们的 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 的 $ 别名吗?谢谢你的帮助。

【问题讨论】:

  • 是什么让你说他们有冲突?他们使用什么版本?大多数版本向后兼容到 1.3

标签: javascript jquery compilation interpreter


【解决方案1】:

您可以使用 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/

【讨论】:

    【解决方案2】:

    当您包含 jQuery 时,它会覆盖 jQuery 变量。因此,您实际上可以按照您的要求进行操作,并且应该可以正常工作,即使使用 $

    不这样做的原因是因为同时维护多个版本的软件并不好玩,您的客户端必须下载多个版本的 jQuery,并且您对将一些应该放在哪里的 JS 代码有奇怪的依赖不在那儿。尽快从源头解决这个问题(即使用一个版本)。

    实际操作中:http://jsfiddle.net/AbAgu/

    【讨论】:

    • 感谢您的回复。但我不明白的是,如果使用 jquery 的脚本中的代码在回调中,直到所有后来的 jquery 都被添加后才被回调,所以它只会使用 jquery 的最后一个定义来覆盖其他所有东西?
    • 不太准确,加载一个版本,然后加载一个插件,然后加载另一个版本,并且附加到 jQuery 的第一个版本的插件也被清除了。小提琴演示没有每个实例的插件
    • @Masu 我不明白你的问题
    • @charlietfl 您将无法使用新的插件调用,但插件完成的任何绑定仍然适用;真正的问题是插件是否将调用绑定到已删除的方法
    • @charlietfl 如果插件与您稍后加载的 jQuery 版本不兼容,您为什么需要它存在?
    【解决方案3】:

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

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

    【讨论】:

    • 通过测试确实会发生这种情况。我加载了三个不同的 jquery,并且代码在被触发之前没有使用任何东西,它们都打印了最后使用的 jquery 版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 2013-03-05
    • 1970-01-01
    相关资源
    最近更新 更多