2016-09-02 40 views
0

我依靠大量的jQuery的网页上正常运行1.9.1功能,而网站本身依靠的jQuery 1.7.1。首先加载1.7.1,并且所有插件都会针对它执行。在添加任何插件脚本1.9.1之后的某些页面上,并将其分配给$.noConflict(true)的变量。问题是我需要访问jQuery UI和其他一些来自1.9.1对象的杂项插件。是否有可能将所有插件从一个版本的jQuery对象复制到另一个版本?

有没有我可以从第二个版本涉及到一些常见的插件参数什么的?可能是什么样的jQuery191.plugins = $.plugins?或者我必须在我的noConflict之前重新加载jQuery插件文件?

回答

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> 

...这显然是丑陋。 :-)但是脚本至少会第二次来自缓存。它意味着的jQuery的访问和版本通过jq171通过jQuery/$的一个访问都有三个插件。

+0

你真的需要显示'.noConflict()'语句,如果你要显示的jQuery的两个版本的加载。 – jfriend00

+0

@ jfriend00:从技术上讲,他们不是必需的例子,但是,我可能应该。 *编辑:*所以我有。 :-) –

+0

谢谢您的信息。我只是实现了文件捆绑,我不想处理拆分包,所以我只是想升级并希望获得最好的结果。有什么地方可以找到可能的升级冲突吗? – Marie

相关问题