我正在开发一个依赖于大量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插件文件?
答案 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
/ $
可访问的版本都具有所有三个插件。