jQuery.noConflict()防冲突机制

许多JS库都非常喜欢使用$作为函数、变量。有时候,由于页面复杂的历史问题,或者为了实现特定的功能,我们不得不在页面中引入多个JS库。今儿个来学习学习jQuery库是怎么解决$冲突问题。(jQuery-1.7.1)

jQuery库全部使用自身的jQuery对象来完成内部实现。

在源码开头,有两行代码:

// Map over jQuery in case of overwrite

_jQuery = window.jQuery,



// Map over the $ in case of overwrite

_$ = window.$,

用来在调用jQuery.noConflict()函数时,检测全局环境中$ 和 jQuery变量是否被其它库覆盖。

 

在源码末尾,有一行代码:

// Expose jQuery to the global object

window.jQuery = window.$ = jQuery;

用来定义全局的jQuery,$,引用自当前库的jQuery对象。

 

jQuery.extend({

    noConflict: function( deep ) {

        if ( window.$ === jQuery ) {

            window.$ = _$;

        }



        if ( deep && window.jQuery === jQuery ) {

            window.jQuery = _jQuery;

        }



        return jQuery;

    },

    //......

}

我们调用 jQuery.noConflict(),返回当前库未被覆盖的jQuery对象。

window.$ === jQuery,用来判断全局的$ 是否引用了当前jQuery对象

如果调用 jQuery.noConflict(true), 还会去检测全局的jQuery对象是否引用了当前的jQuery对象。

 

其实,我们也可以通过简单的修改上下文参数:

//自执行函数

(function($){



})(jQuery);



//相当于jQuery(document).ready(function($){});

jQuery(function($){





});

 

你可能感兴趣的:(jquery)