是否可以将所有插件从 jQuery 对象的一个​​版本复制到另一个版本?

Is it possible to copy all plugins from one version of the jQuery object to another?

我正在开发一个依赖于很多 jQuery 1.9.1 功能的页面,而网站本身依赖于 jQuery 1.7.1。 1.7.1 首先加载,所有插件都针对它执行。在任何插件脚本 1.9.1 添加并分配给具有 $.noConflict(true) 的变量后的某些页面上。问题是我需要访问 jQuery UI 和来自 1.9.1 对象的一些其他杂项插件。

是否有一些通用的插件参数或者我可以从第二个版本中引用的东西?也许是 jQuery191.plugins = $.plugins 之类的东西?还是我必须在 noConflict 之前重新加载 jQuery 插件文件?

我相信这是不言而喻的,但理想情况下更新站点以使用单个最新版本的 jQuery,这样问题就会消失。

不过,您的问题的答案是否定的,您不能复制它们 — 至少不能使用正确编写的插件。一个正确编写的插件的高级结构是这样的:

(function($) {
    // Do things with $ here, such as registering a plugin function:
    $.fn.thePlugin = function() {
        // ...and presumably here as well...
    };
})(jQuery);

这意味着插件在加载插件时引用了控制 jQuery 符号的 jQuery 版本。

稍后,在加载不同版本的 jQuery 后,您可能会想这样做:

jQuery.fn.thePlugin = oldJQuery.fn.thePlugin;

...但是 jQuery 版本之间会有可怕的串扰:插件将由较新的 jQuery 调用,但使用较旧的 jQuery 时它做了它的事情。

现在,碰巧我的greenPlugin上面

因此,在您清理干净之前,您必须重复加载插件:

<script src="jquery-1.7.1.js"></script>
<script src="this-plugin.js"></script>
<script src="that-plugin.js"></script>
<script src="the-other-plugin.js"></script>
<script>
var jq171 = jQuery.noConflict(); // With or without `true`
</script>
<script src="jquery-1.9.1.js"></script>
<script src="this-plugin.js"></script>
<script src="that-plugin.js"></script>
<script src="the-other-plugin.js"></script>

...这显然很难看。 :-) 但脚本可能至少第二次来自缓存。这意味着通过 jq171 访问的 jQuery 版本和通过 jQuery/$ 访问的版本都具有所有三个插件。