一尘不染

如何在同一页面上运行不同版本的jQuery?

javascript

我公司购买了一种在页面上呈现ASP.NET控件的产品。该控件使用jQuery
1.2.3并将脚本标记添加到页面以引用它。如果控件以任何方式修改(包括修改以引用其他版本的jQuery),则控件的开发人员将不支持使用该控件。

我将要开始开发自己的控件,并希望使用jQuery 1.3的功能和速度改进。这两个控件都需要存在于同一页面上。

如何允许购买的控件使用jQuery 1.2.3和新的自定义开发使用jQuery
1.3?同样出于好奇,如果我们要使用需要引用另一个版本的jQuery的附加控件怎么办?


阅读 239

收藏
2020-05-01

共1个答案

一尘不染

您可以通过在无冲突模式下运行jQuery版本来实现。“无冲突”模式是使jQuery与其他框架(如prototype)一起在页面上工作的典型解决方案,并且也可以在这里使用,因为它实质上是对您加载的每个jQuery版本进行命名空间。

<script src="jQuery1.3.js"></script>
<script>
    jq13 = jQuery.noConflict(true);
</script>

<!-- original author's jquery version -->
<script src="jQuery1.2.3.js"></script>

此更改将意味着您需要使用jq13而不是调用要使用的任何jQuery东西$,例如

jq13("#id").hide();

在同一个页面上同时运行两个版本不是理想的情况,但是如果您别无选择,则上述方法应允许您一次使用两个不同的版本。

同样出于好奇,如果我们要使用需要引用另一个版本的jQuery的附加控件怎么办?

如果您需要添加其他版本的jQuery,则可以在上面进行扩展:

<script src="jQuery1.3.js"></script>
<script>
    jq13 = jQuery.noConflict(true);
</script>
<script src="jQuery1.3.1.js"></script>
<script>
    jq131 = jQuery.noConflict(true);
</script>

<!-- original author's jquery version -->
<script src="jQuery1.2.3.js"></script>

变量jq13jq131将分别用于所需的特定于版本的功能。

重要的是, 原始开发人员使用jQuery 必须 最后加载
-原始开发人员很可能在假设$()使用其jQuery版本的情况下编写了他们的代码。如果您在其版本之后加载另一个版本,$则会在您上次加载的版本中“抢占”该版本,这意味着原始开发人员的代码在最新的库版本上运行,从而呈现出noConflicts一定程度的冗余!

2020-05-01