摘要:noConflict()将$或者jQuery的控制权让给第一个实现它的那个库,确保jQuery不会与其它库的$对象发生冲突。希望阅读本篇文章以后大家有所收获,帮助大家对jQuery的理解更加深入。
noConflict()
noConflict()将$或者jQuery的控制权让给第一个实现它的那个库,确保jQuery不会与其它库的$对象发生冲突。
jQuery中源码如下:
var _jQuery = window.jQuery, _$ = window.$; jQuery.noConflict = function(deep){ if(window.$ === jQuery){ window.$ = _$; } if(deep && window.jQuery === jQuery){ window.jQuery = _jQuery; } };
分析源码之前,我们应该注意几个点:
·
jQuery文件应该在其它冲突库文件之后导入;noConflict()必须在你导入jQuery文件之后使用;
导致冲突的库中必须已经存在一个$或者jQuery的命名空间,否则_jQuery = window.jQuery和_$ = window.$就没有意义了
下面开始分析源码:
假如我们引入了两个库,prototype.js和jQuery.js。prototype.js在前,jQuery.js在后,并且prototype.js中存在一个$的命名空间
//这句代码其实是在jQuery文件最开始的地方定义的,目的是保存prototype.js文件中的$或者jQuery命名空间var _jQuery = window.jQuery,_$ = window.$;
jQuery.noConflict = function(deep){//这里判断如果当前的window.$已经被jQuery占用了,就把之前保存的prototype.js中的$的变量_$赋值给window.$进行覆盖
if(window.$ === jQuery){ window.$ = _$; } //这里判断如果deep为true并且当前的window.jQuery也已经被jQuery占用了,就把之前保存的prototype.js中的jQuery的变量_jQuery赋值给window.jQuery进行覆盖 if(deep && window.jQuery === jQuery){ window.jQuery = _jQuery; } };
分析完上面的源码之后,这里有几个点要思考一下:
为什么调用noConflict()之后我们发现window.$已经等于jQuery了?
在jQuery代码最后有一段代码可以解释这个问题:
if ( typeof window === "object" && typeof window.document === "object" ) { window.jQuery = window.$ = jQuery; }
如果prototype.js中没有冲突的命名空间,那调用noConflict()会怎么样么?
如果之前没有冲突的命名空间,那_&和_jQuery都是undefined,所以window.$和window.jQuery都会被undefined覆盖;也就是说,只要调用了noConflict(),jQuery就会交出$或者jQuery的控制权,无论之前有没有命名空间冲突
本文由职坐标整理发布,欢迎关注职坐标WEB前端jQuery频道,获取更多jQuery知识!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号