代码之家  ›  专栏  ›  技术社区  ›  Marie

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

  •  0
  • Marie  · 技术社区  · 8 年前

    我正在开发一个依赖于大量jQuery 1.9.1特性的页面,而站点本身依赖于jQuery 1.7.1.7.1。1.7.1首先加载,所有插件都根据它执行。在某些页面上,添加插件脚本1.9.1并将其分配给变量后 $.noConflict(true) 问题是我需要从1.9.1对象访问jQuery UI和其他一些杂项插件。

    是否有一些常见的插件参数,或者我可以从第二个版本中引用的参数?有点像 jQuery191.plugins = $.plugins 大概或者我必须在noConflict之前重新加载jQuery插件文件吗?

    1 回复  |  直到 8 年前
        1
  •  3
  •   T.J. Crowder    8 年前

    我确信这是不言而喻的,但理想的情况是更新站点以使用单个最新版本的jQuery,这样就可以解决这个问题。

    然而,你的问题的答案是不,你不能复制它们——至少,不能用正确编写的插件。正确编写的插件的高级结构如下:

    (function($) {
        // Do things with $ here, such as registering a plugin function:
        $.fn.thePlugin = function() {
            // ...and presumably here as well...
        };
    })(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 和一个可以通过 / $ 两者都有三个插件。