是否可以在同一页面上使用2个版本的jQuery?

时间:2010-05-14 20:20:09

标签: javascript jquery

注意:我知道类似的问题已经被问过herehere,但是我正在寻找关于如何完成这项工作或完全避免它的充分理由的补充说明

我正在为已经使用旧版jQuery库(1.1.3.1)的现有网站添加功能。我一直在针对最新版本的jQuery库(1.4.2)编写我的附加功能。我只使用较新版本的jQuery测试了网站,它打破了功能,所以现在我正在考虑在同一页面上使用这两个版本。这怎么可能?

在我的代码中我需要做些什么来指定我使用的是一个版本的jQuery而不是另一个版本?例如,我会在我的页面的标题中为这两个版本的jQuery添加<script>标签,但我需要做什么,以便我在我的调用代码中确切地知道我正在调用一个版本的图书馆还是其他人?

也许是这样的:

//Put some code here to specify a variable that will be using the newer
//version of jquery:
var $NEW = jQuery.theNewestVersion();

//Now when I use $NEW, I'll know it's the newest version and won't
//conflict with the older version.
$NEW('#personName').text('Ben');

//And when I use the original $ in code, or simply 'jquery', I'll know
//it's the older version.
$('#personName').doSomethingWithTheOlderVersion();

更新:在阅读了一些答案之后,我开始怀疑尝试玩这个游戏是不是一个好主意......

5 个答案:

答案 0 :(得分:24)

您可以使用jQuery noConflict方法来实现此目的。

<script type="text/javascript" src="jquery-1.1.3.js"></script>
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript">
    //Here, $ refers to the most recent jquery script loaded, which is version 1.4.2.
    $.noConflict();

    //Here, jQuery refers to 1.4.2 and $ refers to 1.1.3
    //You can setup an alias like so:
    var $NEW = jQuery;

    //Now, you can use old jQuery with $ and new jQuery with $NEW.
</script>

答案 1 :(得分:7)

可能的?是的,就像运行jQuery和另一个同时使用名称$的框架一样。包含jQuery的一个副本,并使用noConflict将其分配给新名称,然后对另一个副本执行相同操作。

一个好主意?真的没有,就像同时运行jQuery和另一个框架不是一个好主意一样,只有更多。 jQuery是一个影响深远的入侵框架。如果jQuery的两个实例开始变异相同的元素(并且1.4之前的jQuery版本对于它们触摸的元素非常混杂),它们可能会混淆彼此之间的不可预测,时间敏感和不可剔除的副作用。

如果可能的话,更新在最新的jQuery下运行的所有代码到目前为止是更好的路径。这真的不应该那个很难; jQuery开发人员并没有破坏那些代码应该首先依赖的东西。

答案 2 :(得分:2)

你不应该这样做,$.noConflict()在所有情况下都不会真正帮助你 这是因为,在内部,jQuery使用别名jQuery,所以忘记了 任何美元符号$重新分配...如果您将使用任何使用jQuery的代码:
jQuery('div').doSomethingDepricated()然后它将使用页面中加载的最后一个定义的jQuery。 现在,如果你使用一个插件,它只能用于旧的jQuery,并且在内部使用 它仅使用jQuery别名(不是$)编写,然后它会中断。

如果你真的想使用不同版本的2个jQuery脚本,你可以做到 在其中一个上搜索并替换'jQuery'名称,并将其更改为其他名称, 那么你也可以通过无冲突的方法重新分配它做任何别名。如果你愿意的话。

答案 3 :(得分:1)

作为EndangeredMassa解决方案的扩展,我提出以下修改:

<script type="text/javascript" src="jquery-1.1.3.js"></script>
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript">
    //Here, $ refers to the most recent jquery script loaded, which is version 1.4.2.
    $.noConflict();

    //Here, jQuery refers to 1.4.2 and $ refers to 1.1.3
    //You can setup an alias like so:
    var $NEW = jQuery;

    // jQuery needs to refer to 1.1.3 again and not to 1.4.2
    var jQuery = $;

    //Now, you can use old jQuery with $ and new jQuery with $NEW.
</script>

答案 4 :(得分:0)

修复旧代码以使用最新的jQuery版本。 其他一切都是极其苛刻的,并且会引起所有开发人员的愤怒,他们将来可能不得不使用您的代码。