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 相关文章推荐
javascript replace()正则替换实现代码
Feb 26 Javascript
jquery中filter方法用法实例分析
Feb 06 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
Dec 08 Javascript
适用于javascript开发者的Processing.js入门教程
Feb 24 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
Oct 05 Javascript
详解webpack2+React 实例demo
Sep 11 Javascript
实例解析Vue.js下载方式及基本概念
May 11 Javascript
Vue props用法详解(小结)
Jul 03 Javascript
vue组件实践之可搜索下拉框功能
Nov 25 Javascript
js中offset,client , scroll 三大元素知识点总结
Sep 11 Javascript
Vue-cli项目部署到Nginx服务器的方法
Nov 01 Javascript
node.js如何根据URL返回指定的图片详解
Oct 21 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
PHP个人网站架设连环讲(一)
2006/10/09 PHP
php利用smtp类实现电子邮件发送
2015/10/30 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
php图片添加水印例子
2016/07/20 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
基于jquery的3d效果实现代码
2011/03/23 Javascript
JS获取页面input控件中所有text控件并追加样式属性
2013/02/25 Javascript
解析jquery中的ajax缓存问题
2013/12/19 Javascript
7个JS基础知识总结
2014/03/05 Javascript
文本框倒叙输入让输入框的焦点始终在最开始的位置
2014/09/01 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
jQuery通过点击行来删除HTML表格行的实现示例
2014/09/10 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
2015/07/05 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
实例解析jQuery中如何取消后续执行内容
2016/12/01 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
AngularJS 控制器 controller的详解
2017/10/17 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
2019/04/29 NodeJs
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
js实现从右往左匀速显示图片(无缝轮播)
2020/06/29 Javascript
JS+Canvas实现五子棋游戏
2020/08/26 Javascript
Python代理抓取并验证使用多线程实现
2013/05/03 Python
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
在pycharm中创建django项目的示例代码
2020/05/28 Python
详解CSS3实现响应式手风琴效果
2020/06/10 HTML / CSS
元旦联欢会策划方案
2014/06/11 职场文书
学习退步检讨书
2014/09/28 职场文书
趣味运动会新闻稿
2015/07/17 职场文书