您的位置:首页 > Web前端 > JQuery

jQuery.noConflict()防冲突机制

2014-09-04 10:24 573 查看
许多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($){

});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: