技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> JavaScript --> 如何在一个页面上让多个jQuery版本共存

如何在一个页面上让多个jQuery版本共存

浏览:3120次  出处信息

   如何在一个页面上让多个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代码。

建议继续学习:

  1. JQuery实现Excel表格呈现    (阅读:46461)
  2. 分享一个JQUERY颜色选择插件    (阅读:12381)
  3. jQuery插件---轻量级的弹出窗口wBox.    (阅读:9600)
  4. 10个强大的Ajax jQuery文件上传程序    (阅读:7674)
  5. jQuery的data()方法    (阅读:7434)
  6. jQuery性能优化指南    (阅读:7141)
  7. jQuery Color Animations颜色动画插件    (阅读:6922)
  8. 精于图片处理的10款jQuery插件    (阅读:6045)
  9. jQuery中getJSON跨域原理详解    (阅读:5545)
  10. 配合jquery实现异步加载页面元素    (阅读:5285)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1