多个jQuery版本共存的处理方案_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代码。

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

时间: 2025-01-21 17:42:38

多个jQuery版本共存的处理方案_jquery的相关文章

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

 本文给大家分享的是一个经常需要碰到的问题的解决方案,如何才能让一个页面中同时存在多个jQuery呢,这就是今天我们需要探讨的话题了.     如何在一个页面上让多个jQuery共存呢?比如jquery-1.5和jquery-1.11. 你可能会问,为什么需要在一个页面上让多个jQuery共存?直接引用最新版本的jQuery不行吗? 答案是,不行.因为现实生活是非常残酷的.举个栗子: 现有网站已经引用了jQuery 1.5以及相关插件.如果直接将jQuery升级到最新版,这些插件就不工作了,除非

解决jquery版本冲突的有效方法_jquery

用过jQuery的朋友都知道jQuery不同版本会引发冲突,本文就此问题提出有效的解决方案如下: 案例:解决jQuery1.3.2和1.4.2的冲突.(本例已测试通过!) 第一步:在1.4.2的源代码的最后加上一句 : var $j4 = jQuery.noConflict(true); 之所以在源码这里加,而不是像大多数文章提的在要用到的时候加,这是因为很多基于1.4.2的插件都要加,在这里加可以避免过多插件加这句代码导致重复.这一句是将1.4.2的jQuery和$的引用权限全部放弃.也就是基

CentOS下与Apache连接的PHP多版本共存方案实现详解_php实例

在apache下整合fastCGI模式运行的php-fpm,似乎网上很少相关材料,就连英文版材料也少.只要是php-fpm,基本上都是与nginx搭配.查了一大批相关资料,写本文总结一下. apache下有多个fastCGI的支持方案:至少有mod_fcgi.mod_fastcgi(git).mod_proxy_fcgi等.这两个模块都有点老,尤其mod_fastcgi自从2007年以来就没有更新,略掉不谈,事实上没用过用.mod_proxy_fcgi模块是httpd 2.4+的版本正式引入,通

从零开始学习jQuery (八) 插播:jQuery实施方案_jquery

一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 本篇文章属于临时插播,  用于介绍我在本公司的jQuery实施方案. 二.前言 有了前几章扎实的基础知识我们已经可以在项目中投入使用jQuery了.再继续深入学习jQuery前插播一下我的jQuery实施方案. 每个公司的情况都不同.比如我们公司的页面文件都为用户控件, 物理路径和虚拟路径没有绝对的关系, 所以无法使用相对路径(否则生产环境中会找

网页技巧:多IE版本共存解决方案IETester

我的推荐语 多IE版本共存解决方案虽然以前我写过 IE6.IE7.IE8 共存的解决方案,但是看到IETester这个软件以后那些都已经没有意义了(那些办法副作用比较大,而且实现起来有些难度).使用IETester能够较好的解决,测试网页兼容性的多IE版本的需求.暂时已经支持IE5.5--IE8beta1,我想这已经足够了.还在苦苦找寻IE6和IE7共存或者IE7和 IE8共存的朋友,可以试试这个软件.当然这个软件也不是万能的,在最后,官方非常厚道的给出了暂时存在的重要bug列表. 官方信息IE

CSS调试工具MultipleIE-IE5IE6IE7多版本共存

CSS调试工具MultipleIE-IE5IE6IE7多版本共存-Web标准教程 Web标准是一个潮流与趋势,现在很多网站已经非常重视网站的构建方式,但我们需要面对兼容各版本浏览器的问题,这是一个非常让我们头疼的问题,微软IE7的推出,在网页设计时需要同时考虑兼容ie7前面的IE5/IE5.5/IE6各个版本.这给我们的CSS调试测试增加了难度,我们一台PC,如何才能集成所有的这些浏览器环境呢?最近终于找到IE版本合集软件包Multiple_IE.强烈推荐给大家,大家升级到IE7后也可方便测试网

Centos6.9下配置php5.6和php5.4多版本共存

当前服务器用的是军哥lnmp1.3一键包,已经装好了php5.6,在此基础上,并存一个php5.4的版本. 废话不多说直接进入主题! 编译安装php-5.4.45 下载php5.4.45源码包 cd /usr/src wget http://cn.php.net/distributions/php-5.4.45.tar.gz 解压缩源码包 tar zxf php-5.4.45.tar.gz 进入php-5.4.45目录进行编译(注意./configure里指定的路径,当前php-5.6用的/us

前端-项目里面的jquery版本 1.3.2升级到1.9.1,有没有什么好的比较快捷的办法的?

问题描述 项目里面的jquery版本 1.3.2升级到1.9.1,有没有什么好的比较快捷的办法的? 请问各位大神,项目里面的jquery版本 1.3.2升级到1.9.1,有没有什么好的比较快捷的办法的?最近PC的项目希望前端版本库升级,感觉挺麻烦,哪位大神有好的办法的?

python-MacBook有多个版本共存,如何打开指定版本的easy_install

问题描述 MacBook有多个版本共存,如何打开指定版本的easy_install 系统默认的版本是2.7,后来安装了3.5,现在想使用3.5的'easy-install',终端里要怎么设置? 解决方案 设置一个软链接等命令来指向3.5 再来安装setuptools等以及后续的其他包