当前位置: 首页 > 编程笔记 >

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

宇文和同
2023-03-14
本文向大家介绍多个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代码。

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

 类似资料:
  • Qt Creator 允许使用多个 Qt4 版本,并且可以在不同的版本间快速切换。 当 Qt Creator 启动时,它首先会根据环境变量 PATH 中设定的目录寻找 Qt4,这个被自 动找出来的 Qt4 版本称作“Auto-detected Qt”。术语“version of Qt”指的通常也是 Auto-detected Qt。当然了,读者朋友如果只是安装了一个版本的 Qt4,并且准备只使用这

  • 本文向大家介绍virtualenv实现多个版本Python共存,包括了virtualenv实现多个版本Python共存的使用技巧和注意事项,需要的朋友参考一下 virtualenv创建一个拥有自己安装目录的环境, 这个环境不与其他虚拟环境共享库, 能够方便的管理python版本和管理python库。主要解决不同项目之间环境冲突的问题。 小技巧 某些开发包在下载的时候会出现下载错的的情况,如果配置国

  • 问题内容: 有什么方法可以使pip多个版本的Python正常运行吗?例如,我想用于pip将内容显式安装到我的站点2.5安装或站点2.6安装中。 例如,使用,我使用。 而且,是的-我了解,不是-这不是解决此特定问题的方法。 问题答案: 在目前的建议是使用,这里python是Python的版本,你想使用。这是建议,因为它适用于所有版本的和所有形式的。例如: 先前的答案,留给后代: 从0.8版开始,支持

  • 问题内容: 我有三个大名单。前一个包含位数组(模块位数组0.8.0),另外两个包含整数数组。 这些数据结构占用相当多的RAM(总计约16GB)。 如果我使用以下方法启动12个子流程: 这是否意味着将为每个子流程复制l1,l2和l3,或者子流程将共享这些列表?或者更直接地说,我将使用16GB还是192GB的RAM? someFunction将从这些列表中读取一些值,然后根据读取的值执行一些计算。结果

  • 本文向大家介绍lnmp安装多版本PHP共存的方法详解,包括了lnmp安装多版本PHP共存的方法详解的使用技巧和注意事项,需要的朋友参考一下 通过lnmp安装了PHP7版本,但是发现与程序不兼容,需要降低到7.0以下的版本。 查找lnmp的install.sh文件,一般在/root/lnmp1.5/install.sh 下执行命令 sudo ./install.sh mphp 等待安装过程 安装结束

  • 本文向大家介绍jQuery插件版本冲突的处理方法分析,包括了jQuery插件版本冲突的处理方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了jQuery插件版本冲突的处理方法。分享给大家供大家参考,具体如下: jQuery 的某个插件 当有多个版本同时可能会有冲突,导致代码错误 参考typeahead的处理方法,可以在插件中增加noconflict 方法来解决这个问题(在进入版本的时