jquery noConflict详解

Posted codeing or artist ?

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jquery noConflict详解相关的知识,希望对你有一定的参考价值。

noConflict是防止其他库也用了$作为全局变量而引起的冲突,我们看看jquery是怎么做的

首先jquery在代码的开始部分定义了2个私有变量:

_jQuery = window.jQuery

_$ = window.$

然后jquery提供了noConflict方法:

 1 noConflict: function( deep ) {
 2         if ( window.$ === jQuery ) {
 3             window.$ = _$;
 4         }
 5 
 6         if ( deep && window.jQuery === jQuery ) {
 7             window.jQuery = _jQuery;
 8         }
 9 
10         return jQuery;
11     },

我们平时是这样用的:

<script src="jquery.js"></script>

<script>

  $(‘div‘); 

</script>


这种情况_jQuery和_$都是undefined。

 

当引入了其他库:

<script src="jquery.js"></script>

var JQ = $.noConflict();

var $ = 123;//假设123是其他库

JQ(function(){

  alert($); //123

});

这种情况_jQuery和_$都是undefined。我们看源码可以知道$.noConflict()返回了JQuery对象,所以此时JQ就是JQuery对象,jquery放弃了$。

 

再看一种情况:

var $ = 123;//假设123是其他库

<script src="jquery.js"></script>

var JQ = $.noConflict();

JQ(function(){

  alert($); //123

});

$在引入jquery库之前被引入了,此时_$就是$ = 123,然后在noConflict函数中再把_$赋值给window.$

如果引入的其他框架变量为JQuery就要这样用:

var JQuery = 123;//假设123是其他库

<script src="jquery.js"></script>

var JQ = $.noConflict(true); //加了一个参数,看源码就明白啦

JQ(function(){

  alert(JQuery); //123

});

 

以上是关于jquery noConflict详解的主要内容,如果未能解决你的问题,请参考以下文章

带有 noConflict 和分配 noConflict 变量的 jQuery

Mailchimp 的 $mcj = jQuery.noConflict(true) 导致冲突

jQuery的noConflict以及插件扩展

jquery.noConflict源码分析

window.onload多个共存 - 借鉴jQuery.noConflict的思路

JQuery的noConflict()方法