jQuery中noConflict()用法实例分析


Posted in Javascript onFebruary 08, 2015

本文实例讲述了jQuery中noConflict()用法。分享给大家供大家参考。具体分析如下:

jQuery默认使用"$"操作符,$ 符号只是 window.jQuery 对象的一个引用,jQuery.noConflict() ,这个函数将变量$的控制权让渡给第一个实现它的那个库。这有助于确保jQuery不会与其他库的$对象发生冲突。在运行这个函数后,就只能使用jQuery变量访问jQuery对象。例如,在要用到$("div p")的地方,就必须换成jQuery("div p")。

一、"$"操作符

1、jQuery默认使用"$"操作符,prototype等其他框架也是是使用"$",于是,如果jQuery在其他库之后引入,那么jQuery将获得"$"使用权。这样的情况也很容易理解,毕竟JS是从上到下流式执行的。

2、如果在其他使用"$"的库之前引入jQuery,那么jQuery将不会占用"$"。

提示:在其他 JavaScript 库为其函数使用 $ 时,该方法很有用。

我们在jquery中获取变量都会使用到$,但是还有很多插件都是可以使用$这个符号了,如果我们同时要引用就会导致出现问题了,jquery为了防止这种事情发生就引入了noconflict()

二、jQuery.noConflict的定义
 
jQuery.noConflict 方法包含一个可选的布尔参数,用以决定移交 $ 引用的同时是否移交 jQuery 对象本身:

jQuery.noConflict([removeAll])

函数的说明:

缺省情况下,执行 noConflict 会将变量 $ 的控制权移交给第一个产生 $ 的库;当 removeAll 设置为 true 时,执行 noConflict 则会将 $ 和 jQuery 对象本身的控制权全部移交给第一个产生他们的库。
 
三、jQuery.noConflict源码分析
 
jQuery 源码开头,首先做的一件事情是这样的:

// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
// Map over the $ in case of overwrite
_$ = window.$,

容易理解的是,jQuery 通过两个私有变量映射了 window 环境下的 jQuery 和 $ 两个对象,以防止变量被强行覆盖。一旦 noConflict 方法被调用,则通过 _jQuery, _$, jQuery, $ 四者之间的差异,来决定控制权的移交方式,具体的代码如下:

noConflict: function( deep ) {
 if ( window.$ === jQuery ) {
 window.$ = _$;
 }
 if ( deep && window.jQuery === jQuery ) {
 window.jQuery = _jQuery;
 }
 return jQuery;
}

再来看上面所说的参数设定问题,如果 deep 没有设置,_$ 覆盖 window.$,此时 jQuery 别名 $ 失效,但 jQuery 本身完好无损。如果有其他类库或代码重新定义了 $ 变量,它的控制权就完全交接出去了。反之如果 deep 设置为 true 的话,_jQuery 覆盖 window.jQuery,此时 $ 和 jQuery 都将失效。
这种操作的好处是,不管是框架混用还是 jQuery 多版本共存这种高度冲突的执行环境,由于 noConflict 方法提供的移交机制,以及本身返回未被覆盖的 jQuery 对象,完全能够通过变量映射的方式解决冲突。

四、jQuery.noConflict实例
 
1、将 $ 引用的对象映射回原始的对象:

jQuery.noConflict();
jQuery("div p").hide(); // 使用 jQuery
$("content").style.display = "none"; // 使用其他库的 $()

2、恢复使用别名 $,然后创建并执行一个函数,在这个函数的作用域中仍然将 $ 作为 jQuery 的别名来使用。在这个函数中,原来的 $ 对象是无效的。这个函数对于大多数不依赖于其他库的插件都十分有效:

jQuery.noConflict();
(function($) { 
 $(function() {
  // 使用 $ 作为 jQuery 别名的代码
 });
})(jQuery);
... // 其他用 $ 作为别名的库的代码

3、可以将 jQuery.noConflict() 与简写的 ready 结合,使代码更紧凑:

jQuery.noConflict()(function(){
  // 使用 jQuery 的代码
});
... // 其他库使用 $ 做别名的代码

4、创建一个新的别名用以在接下来的库中使用 jQuery 对象:

var j = jQuery.noConflict();
j("div p").hide();  // 基于 jQuery 的代码
$("content").style.display = "none";// 基于其他库的 $() 代码

5、完全将 jQuery 移到一个新的命名空间:

var dom = {};
dom.query = jQuery.noConflict(true);
//结果:
dom.query("div p").hide();  // 新 jQuery 的代码
$("content").style.display = "none";  // 另一个库 $() 的代码
jQuery("div > p").hide();  // 另一个版本 jQuery 的代码

希望本文所述对大家的jQuery程序设计有所帮助。

Javascript 相关文章推荐
ASP.NET jQuery 实例2 (表单中使用回车在TextBox之间向下移动)
Jan 13 Javascript
基于jQuery选择器的整理集合
Apr 26 Javascript
javascript关于继承的用法汇总
Dec 20 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
Jan 22 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
Mar 10 Javascript
js获取当前周、上一周、下一周日期
Mar 19 Javascript
JS实现汉字与Unicode码相互转换的方法详解
Apr 28 Javascript
JS按条件 serialize() 对应标签的使用方法
Jul 24 Javascript
Angularjs实现上传图片预览功能
Sep 01 Javascript
Vue中的scoped实现原理及穿透方法
May 15 Javascript
JavaScript基于数组实现的栈与队列操作示例
Dec 22 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
Mar 27 Javascript
jquery实现聚光灯效果的方法
Feb 06 #Javascript
js实现Select下拉框具有输入功能的方法
Feb 06 #Javascript
JQuery中serialize()用法实例分析
Feb 06 #Javascript
jQuery中on()方法用法实例详解
Feb 06 #Javascript
JS实现文字向下滚动完整实例
Feb 06 #Javascript
jquery中filter方法用法实例分析
Feb 06 #Javascript
Jquery对select的增、删、改、查操作
Feb 06 #Javascript
You might like
中国第一家无线电行
2021/03/01 无线电
php将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
简述php环境搭建与配置
2016/12/05 PHP
PHP实现按之字形顺序打印二叉树的方法
2018/01/16 PHP
PHP实现的获取文件mimes类型工具类示例
2018/04/08 PHP
JS网络游戏-(模拟城市webgame)提供的一些例子下载
2007/10/14 Javascript
修改jquery.lazyload.js实现页面延迟载入
2010/12/22 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
Bootstrap每天必学之模态框(Modal)插件
2016/04/26 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
vue使用svg文件补充-svg放大缩小操作(使用d3.js)
2020/09/22 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
[01:02:25]2014 DOTA2华西杯精英邀请赛 5 24 iG VS DK
2014/05/26 DOTA
Python中的Classes和Metaclasses详解
2015/04/02 Python
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
python 接口返回的json字符串实例
2018/03/27 Python
基于Django静态资源部署404的解决方法
2019/07/28 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
2019/08/30 Python
使用canvas生成含有微信头像的邀请海报没有微信头像问题
2019/10/29 HTML / CSS
大学生涯自我鉴定
2014/01/16 职场文书
文明和谐家庭事迹材料
2014/05/18 职场文书
创建文明城市标语
2014/06/16 职场文书
2014年学生会干事工作总结
2014/11/07 职场文书
2014年城市管理工作总结
2014/12/02 职场文书
化妆品促销活动总结
2015/05/07 职场文书
2016开学第一课心得体会
2016/01/23 职场文书
《实心球》教学反思
2016/02/23 职场文书