`

如何在一个页面上让多个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版本共存的处理方案

    【jQuery版本共存的原因与挑战】 在Web开发中,经常会出现需要在同一个页面上使用不同版本的jQuery的情况。...在实际项目中,应尽量减少对多个jQuery版本的依赖,但如果无法避免,上述方法提供了一个可靠的解决方案。

    JQuery chm帮助文件(多个版本)

    在提供的压缩包中,包含了多个jQuery版本的CHM帮助文件,这些文件为开发者提供了详细而全面的API参考,涵盖了从jQuery 1.4.4到jQuery 3.1的不同版本。每个版本的CHM文件都对应了该版本jQuery的核心功能和更新内容,...

    通过jquery控制tab,支持多个tab共存

    本文将深入探讨如何利用jQuery库来实现一个支持多个tab共存的动态标签页系统。 ### 一、理解jQuery与tab组件 jQuery是一个快速、简洁的JavaScript库,它极大地简化了HTML文档的遍历、事件处理、动画以及Ajax交互等...

    jQuery内核(版本从1.5.2-1.8.3,包括min)

    这个资源集合了jQuery从1.5.2到1.8.3的多个版本,包括min版,即经过压缩和优化的版本,适用于生产环境以提高网页加载速度。 1. **jQuery的核心功能**: - **选择器**:jQuery通过类似CSS的语法提供了强大的DOM元素...

    jquery 3.5.1

    2. **链式调用**:jQuery对象的方法返回的是自身,使得多个操作可以连续调用,如`$("#element").css("color", "red").fadeIn(500)`。 3. **事件处理**:jQuery提供了统一的事件绑定和触发方式,如`$(document)....

    jquery1.6.1 jquery

    - **jquery-1.6.1.min.js**:这是经过压缩和优化的版本,删除了不必要的空格和注释,提高了加载速度,适合在网站上部署使用。 **4. 使用 jQuery 开发** 使用jQuery进行开发时,通常会通过 `&lt;script&gt;` 标签引入...

    jquery日历 插件

    这将在页面加载完成后为指定的输入框添加一个交互式的日历。 3. **功能特性** - **日期格式化**:Datepicker支持多种日期格式,如`mm/dd/yy`,`dd-mm-yyyy`等,可以通过`dateFormat`选项设置。 - **禁用日期**:...

    JQuery前端开发技术

    随着Web技术的发展,jQuery经历了多个版本的更新。jQuery 3.x移除了对旧版IE浏览器的支持,优化了代码,提高了性能。jQuery 1.x和2.x则继续支持更广泛的浏览器。 **9. jQuery的生态系统** jQuery不仅仅是一个库,它...

    jquery类库和帮助文档

    jQuery提供了`noConflict()`模式,允许在同一个页面上与其他JavaScript库共存。通过正确管理和隔离作用域,可以避免命名冲突。 十、jQuery学习资源 除了文档和API,互联网上有许多jQuery教程、示例和社区,如...

    多个jquery.datatable共存,checkbox全选异常的快速解决方法

    在使用多个jquery.datatable控件并置入同一个页面的时候,可能会遇到checkbox全选功能异常的问题。具体表现为,当点击全选复选框时,页面上所有的datatable表格的全选复选框都会被选中,而不是仅限于当前操作的表格...

    jQuery 1.8.0 API 中文手册

    2. **避免使用$全局变量**: 在多个库共存时可能导致冲突,可以使用 `$.noConflict()` 解决。 3. **批量操作**: 避免对单个元素进行多次操作,应尽可能一次性选取并操作多个元素。 4. **使用最新的jQuery版本**: ...

    Kendo UI for jQuery 2018.3.1017

    这一特性在当今多设备共存的时代尤为重要,确保了应用的普适性和市场竞争力。 在2018.3.1017这个版本中,Kendo UI可能包含了一些性能优化、新功能的添加或者已知问题的修复。例如,可能提升了组件的渲染速度,增加...

    jQuery Mobile Up and Running

    jQuery Mobile是一个轻量级、跨平台的JavaScript库,旨在简化HTML5应用的创建,特别是在智能手机和平板电脑上。这本书面向的读者可能是对Web开发有一定基础,但希望深入了解移动开发的程序员。 jQuery Mobile的核心...

    JQuery zTree v3.0 下载

    它与 IE、FireFox、Chrome 等浏览器保持兼容,在一个页面内可同时生成多个Tree 实例,支持一次性静态生成和Ajax 异步加载两种方式,能够响应和反馈多种事件。它提供了个性化的定制服务,支持灵活的参数配置,用户...

    基于jquery的tab选项卡完美改进版

    本文将深入探讨基于jQuery实现的选项卡组件,特别是“基于jQuery的tab选项卡完美改进版”,它支持在同一web页面上显示多个选项卡。 首先,jQuery是一个轻量级、功能丰富的JavaScript库,它简化了DOM操作、事件处理...

    jquery-1.3.2.min.js

    - **链式操作(Chaining)**:jQuery对象允许连续调用多个方法,如$("#element").css("color", "red").slideUp(),提高了代码的效率和可读性。 - **事件处理(Events)**:jQuery提供了一套统一的事件处理方式,如...

    jquery 进度条

    在多个插件共存的项目中,正确引入和初始化进度条插件是关键。可能需要使用命名空间或`$.noConflict()`来避免与其他库的冲突。 总的来说,jQuery进度条插件为开发者提供了便捷的方式来实现进度指示功能。理解...

    jQuery入门手册

    在中国,jQuery 被广泛应用于多个知名网站和平台,如中国农业银行、中国交通银行、网易、百度、豆瓣、CSDN、凡客诚品、京东商城、卓越、高朋团购、拉手网、团宝网等,证明了其在实际项目中的稳定性和高效性。...

Global site tag (gtag.js) - Google Analytics