Skip to main content
 首页 » 编程设计

jquery之有没有一种优雅的方式来缓慢升级 jQuery

2026年07月31日8linjiqin

我们想要从一个版本的 jQuery 升级到另一个版本。我们使用各种在线插件并编写了许多我们自己的插件。现在的挑战是尝试在不完全重写的情况下缓慢迁移所有脚本对象。我有一个关于如何处理这个问题的想法:

但我有疑问:

  1. 下面的想法是个好主意吗?
  2. 我可以(直接)告诉每个 jQuery 对象依赖项所在的位置吗?
  3. 如果这是一个坏主意......您会如何处理?
  4. 我是否只需重写升级时发生损坏的每个对象? (苏克斯!)

解释问题:
如果您的所有插件仅在单个页面的范围内运行,那么很容易解决不同的版本:只需在页面级别而不是母版页级别执行文件包含(废话!)。然而,位于母版页或用户控件中的对象有点困难......因为它们需要特定版本才能正确运行。

这是我的想法:
插件的定义以匿名函数开始。

(function ($){<!- code goes here -->})(jQuery); 

我见过的所有依赖项都以此为起点。

示例: jQuery 依赖项包括插件,例如:ui.widget、ui.position、ui.core 等。

如果我使用 JavaScript 对象引用每个版本的 jQuery(及其依赖项)并将该对象传递到各种内部和在线插件中,会怎么样?

对象引用可能如下所示:

var jQueryVersion1_3_2 = function(){<!- paste the files contents here-->}; 
var jQueryVersion1_4_4 = function(){<!- paste the files contents here-->}; 

插件:
我的内部和在线插件仍然可以作为(正常)文件链接包含在内,但进行了以下更改

从此开始:

// Plug-in X 
(function ($){<!- its untouched code -->})(jQuery); 
// Plug-in Y 
(function ($){<!- its untouched code -->})(jQuery); 
// Plug-in Z 
(function ($){<!- its untouched code -->})(jQuery); 

...版本控制在这里很糟糕!

对此...

// Plug-in X 
(function ($){<!- its untouched code -->})(jQueryVersion1_3_2); 
// Plug-in Y 
(function ($){<!- its untouched code -->})(jQueryVersion1_3_2); 
// Plug-in Z 
(function ($){<!- its untouched code -->})(jQueryVersion1_4_4); 

...现在我们可以慢慢升级我们的对象。

我看到的唯一问题:
挑战变成了插件依赖关系(版本之间)。在测试升级中,以下内容开始突破各种插件,例如:

  • ui.widget、ui.position、ui.core 等(升级后全部损坏)。

我看到的唯一答案是:
将 jQuery 和所有各种引用包装到一个函数中并将其保存到上面的变量中。然后将该中间对象传递到每个插件 AS jQuery 中。

帮助我,欧比旺·克诺比……你是我唯一的希望!

请您参考如下方法:

使用 $.noConflict 全局创建所有版本

<script src="jquery 1.x" /> 
<script>  
    var jQuery_1_x = $.noConflict(true); 
</script> 
... 

然后将每个 jQuery 插件(内部或第 3 方)包装在闭包中,例如:

(function(jQuery, $) { 
 
    ... // code 
 
}(jQuery_1_x, jQuery_1_x)); 

唯一可能破坏此方法的是第三方代码,该代码在任何函数之外使用 var foo 来创建全局对象。您需要查找任何全局函数/对象/方法并使用手动提升它们

window.foo = ...

幸运的是,无论如何,创建全局函数/对象/方法被认为是不好的形式,所以不应该有太多。