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

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

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

我如何允许购买的控件使用jQuery 1.2.3和新的自定义开发来使用jQuery 1.3? 也出于好奇,如果我们要使用额外的控件来引用另一个版本的jQuery呢?

您可以通过以无冲突模式运行您的jQuery版本来实现此目的。 “无冲突”模式是让jQuery像其他框架(如原型)一起工作的典型解决scheme,也可以在这里使用,因为它实际上是为您加载的每个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> 

这个改变意味着你想要使用的任何jQuery的东西都需要使用jq13而不是$来调用,例如

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

让这两个版本在同一个页面上运行并不是一个理想的情况,但是如果你没有别的select,那么上面的方法应该允许你同时使用两个不同的版本。

也出于好奇,如果我们要使用额外的控件来引用另一个版本的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> 

variablesjq13jq131将分别用于您所需的特定于版本的function。

原始开发人员使用jQuery最后加载非常重要 – 原始开发人员可能在假设$()将使用其jQuery版本的情况下编写代码。 如果你在他们之后加载另一个版本,那么$会被你加载的最后一个版本“抓住”,这意味着原始开发者的代码运行在最新的库版本上,使得noConflicts有点多余!

正如jQuery.noConflict所说,你可以用jQuery.noConflict做到这一点,但是在声明variables时不要忘记var 。 喜欢这个。

 <script src="jQuery1.3.js"></script> <script> var jq13 = jQuery.noConflict(true); </script> <!-- original author's jquery version --> <script src="jQuery1.2.3.js"></script> 

你可以通过在函数的后面加上(jq13) })把所有$连接到jq13。 喜欢这个

 (function($) { ... })(jq13); 

看起来顺序并不重要,例如: http : //gist.github.com/136686 。 控制台输出在顶部,所有版本似乎都在正确的位置。

让它错误的工作

 var jq16 = $.noConflict(false); 

在第二个版本中声明一个variables为$ .noConflict(true)。 并使用声明的variables代替$在jQuery代码中使用。 请检查下面的代码:这个代码是在第二个版本的jquery声明之后使用的:

 <script type="text/javascript"> var jQuery_1_9_1 = $.noConflict(true); function pageLoad(sender, args) { var $ddl = jQuery_1_9_1("select[name$=drpClassCode]"); var $ddl1 = jQuery_1_9_1("select[name$=drpSubContractors]"); $ddl.select2(); $ddl1.select2(); $ddl.bind("change keyup", function () { $ddl.fadeIn("slow"); }); $ddl.bind("change keyup", function () { $ddl1.fadeIn("slow"); }); }