多个jQuery版本共存的处理方案

 更新时间:2015年03月17日 11:05:23   投稿:hebedich  
本文给大家分享的是一个经常需要碰到的问题的解决方案,如何才能让一个页面中同时存在多个jQuery呢,这就是今天我们需要探讨的话题了。

如何在一个页面上让多个jQuery共存呢?比如jquery-1.5和jquery-1.11。

你可能会问,为什么需要在一个页面上让多个jQuery共存?直接引用最新版本的jQuery不行吗?

答案是,不行。因为现实生活是非常残酷的。举个栗子:

现有网站已经引用了jQuery 1.5以及相关插件。如果直接将jQuery升级到最新版,这些插件就不工作了,除非你能把这些插件全部升级,或者等各个插件的作者发布支持最新版jQuery的版本。

现在,如果我们要基于jQuery开发新的插件或者写JavaScript代码,用新版本会比较省时省力。

但旧版本又绝对不能扔掉,怎么办?

方法是通过jQuery的noConflict()来让多版本共存。

当我们导入jQuery时,jQuery仅向window这个全局空间注入两个变量:

复制代码 代码如下:

   window.$ = window.jQuery = { jQuery object };

同时,jQuery内部保留旧的window.$和window.jQuery对象的引用。当我们调用:

复制代码 代码如下:

   var $jq = $.noConflict();

window.$被恢复,但window.jQuery仍是jQuery。

当我们调用:

复制代码 代码如下:

   var $jq = $.noConflict(true);

window.$和window.jQuery都被恢复了,一切看起来就像jQuery从未被导入过一样,只不过可以通过变量$jq来使用jQuery。

所以,让新旧版本共存的jQuery可以这样实现:

复制代码 代码如下:

   <script src="jquery-1.5.js"></script>
   <script src="jquery-1.11.js"></script>
   <script>
      // 现在window.$和window.jQuery是1.11版本:
      console.log($().jquery); // => '1.11.0'
      var $jq = jQuery.noConflict(true);
      // 现在window.$和window.jQuery被恢复成1.5版本:
      console.log($().jquery); // => '1.5.0'
      // 可以通过$jq访问1.11版本的jQuery了
   </script>
   <script src="myscript.js"></script>

在myscript.js中,用$jq就可以访问1.11版本的jQuery了。

至此,问题解决。

但是,引入两个版本的jQuery后,页面被搞得乱七八糟。如果有人看不懂代码,把var $jq = jQuery.noConflict(true);删掉了怎么办?或者,把导入jQuery的两行互换了位置,最后就得不到正确的jQuery版本。

最好的办法是不改动页面,直接引用我们编写的新的js文件:

复制代码 代码如下:

   <script src="jquery-1.5.js"></script>
   <script src="myscript.js"></script>

这样一来,我们就在myscript.js内部引用最新版jQuery,而页面无论有没有jQuery,有哪个版本的jQuery,我们都不关心。

开始编写新的更好的解决方案。首先,把myscript.js的主体确定下来:

复制代码 代码如下:

   // myscript.js
   (function () {
      // BEGIN
      // TODO: javascript code here...
      // END
   })();

用匿名函数是个好习惯,不污染全局变量,同时杜绝外部代码访问。

下一步是直接把jQuery 1.11的代码嵌进去:

复制代码 代码如下:

   // myscript.js
   (function () {
      // BEGIN
      /*! jQuery v1.11.1 */
      !function(a,b){"object"==typeof module&&"object"==typeof module.exports?...
      if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=...
      },cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(thi...
      var $ = jQuery.noConflict(true);
      // TODO: javascript code here...
      // END
   })();

嵌入的当然是压缩后的代码,一共3行,然后加一句:

复制代码 代码如下:

   var $ = jQuery.noConflict(true);

注意到$是一个局部变量,在后面的代码中,可以随时引用这个$,跟页面上其他版本的jQuery全局变量$不是一个对象。

最后一步工作就是检查jQuery的协议是否允许我们把jQuery源码直接嵌入我们自己的JavaScript代码。

以上所述就是本文的全部内容了,希望大家能够喜欢。

相关文章

  • JQuery给select添加/删除节点的实现代码

    JQuery给select添加/删除节点的实现代码

    下面小编就为大家带来一篇JQuery给select添加/删除节点的实现代码。小编觉得挺不错的,现在分享给大家,也给大家做个参考
    2016-04-04
  • jQuery基于cookie实现的购物车实例分析

    jQuery基于cookie实现的购物车实例分析

    这篇文章主要介绍了jQuery基于cookie实现购物车的方法,结合实例形式简单分析了jQuery基于cookie实现针对商品信息的购物车存储功能,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-12-12
  • jQuery入门介绍之基础知识

    jQuery入门介绍之基础知识

    本文主要给大家介绍了些jQuery的基础知识,算是一个入门的小知识库,包含jQuery简介、对象转换、以及基本选择器和层次选择器等知识点。
    2015-01-01
  • jQuery实现弹出窗口中切换登录与注册表单

    jQuery实现弹出窗口中切换登录与注册表单

    本文给大家推荐的是一款jQuery实现弹出窗口中切换登录与注册表单的特效。适用浏览器:IE8+、FireFox、Chrome、Safari、Opera。十分的方便实用,有需要的小伙伴可以参考下。
    2015-06-06
  • jQuery 3 中的新增功能汇总介绍

    jQuery 3 中的新增功能汇总介绍

    本文带你了解了一遍 jQuery 3 将会带来的一些重大变化。或许你已经注意到了,这个版本是可能对你现有的项目产生太大的影响,因为没有引入太多许多重大更改。
    2016-06-06
  • jQuery EasyUI Pagination实现分页的常用方法

    jQuery EasyUI Pagination实现分页的常用方法

    这篇文章主要为大家详细介绍了jQuery EasyUI Pagination实现分页的常用方法,感兴趣的朋友可以参考一下
    2016-05-05
  • jquery实现简单的swiper轮播预览原图

    jquery实现简单的swiper轮播预览原图

    这篇文章主要为大家详细介绍了jquery实现简单的swiper轮播预览原图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍

    jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍

    这篇文章主要介绍了jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • jQuery实现动态添加节点与遍历节点功能示例

    jQuery实现动态添加节点与遍历节点功能示例

    这篇文章主要介绍了jQuery实现动态添加节点与遍历节点功能,结合实例形式分析了jQuery针对页面元素节点元素的动态添加与遍历相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • 基于jQuery实现淡入淡出效果轮播图

    基于jQuery实现淡入淡出效果轮播图

    这篇文章主要为大家详细介绍了基于jQuery淡入淡出效果轮播图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08

最新评论