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

时间:2016-09-02 16:21:17

标签: jquery jquery-ui jquery-plugins

我正在开发一个依赖于大量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插件文件?

1 个答案:

答案 0 :(得分:3)

我确信不言而喻,但理想情况下更新网站以使用单个最新版本的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 / $可访问的版本都具有所有三个插件。