jQuery中noconflict函數(shù)的實(shí)現(xiàn)原理分解
jQuery中,noconflict是用來(lái)防止變量沖突,用來(lái)釋放變量控制權(quán)的一個(gè)重要方法。我們知道,jQuery中對(duì)外提供有兩個(gè)全局變量,$和jQuery,雖然jQuery只產(chǎn)生了兩個(gè)全局變量,極少情況下才會(huì)出現(xiàn)沖突,但是如果網(wǎng)頁(yè)中如果包涵較多的類(lèi)庫(kù),有自定義$或jQuery全局變量的存在時(shí),就產(chǎn)生沖突。
jQuery提供的noconflict函數(shù)很好的解決了變量沖突問(wèn)題,無(wú)論是$或者jQuery沖突都可以解決,接下來(lái)我們就來(lái)分析一下jQuery的沖突處理。
先來(lái)看一下jQuery源碼中noconflict的實(shí)現(xiàn):
(function(window,undefined){
var
// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
// Map over the $ in case of overwrite
_$ = window.$,
jQuery.extend({
noConflict: function( deep ){
if ( window.$ === jQuery ) {
window.$ = _$;
}
if ( deep && window.jQuery === jQuery ) {
window.jQuery = _jQuery;
}
return jQuery;
}
})
}(window)
在這里jQuery.extend是jQuery擴(kuò)展靜態(tài)屬性的方法,這里可以看成直接在jQuery上附加noConflict方法。在匿名函數(shù)的內(nèi)部,分別定義內(nèi)部變量_jQuery和_$用來(lái)存儲(chǔ)window.jQuery和window.$, 這么做的用作在于用內(nèi)部變量保存jQuery運(yùn)行之前這兩個(gè)全局變量的狀態(tài), 以便在后面的防沖突操作中還原這兩個(gè)變量。noConflict可處理$和jQuery這兩個(gè)變量沖突的情況,默認(rèn)處理$,傳入一個(gè)true參數(shù),則處理jQuery沖突的情況。
window.$ === jQuery用來(lái)判斷全局變量是否等于jQuery,如果等于,則重新還原全局變量$為jQuery運(yùn)行之前的變量(存儲(chǔ)在內(nèi)部變量 _$ 中);deep && window.jQuery === jQuery 當(dāng)開(kāi)啟深度沖突處理并且全局變量jQuery等于內(nèi)部jQuery,則把全局jQuery還原成之前的狀況。判斷window.$ === jQuery和window.jQuery=jQuery的意義在于保護(hù)已經(jīng)定義的變量不被重寫(xiě),如下面的代碼:
//引入jQuery庫(kù) var $="String"; var jq=jQuery.noconflict(); var jQuery="This is a line"; var j=jq.noconflict(true); console.log($);//這里如果沒(méi)有window.$===jQuery這句判斷,那么$將會(huì)等于undefined而不是"String"。 console.log(jQuery); //同上,如果沒(méi)有判斷window.jQuery===jQuery,重新定義的jQuery就會(huì)被undefined覆蓋。
整個(gè)運(yùn)行流程參加下圖:

noConflict返回的是jQuery庫(kù)內(nèi)部的jQuery構(gòu)造函數(shù), 像使用$一樣盡情使用它吧!
- 解決 INSTALL FAILED CONFLICTING PROVIDER的問(wèn)題方法
- Android 出現(xiàn)問(wèn)題Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER解決辦法
- 三分鐘帶你玩轉(zhuǎn)jQuery.noConflict()
- 輕松搞定jQuery.noConflict()
- jQuery中noConflict()用法實(shí)例分析
- jquery插件沖突(jquery.noconflict)解決方法分享
- jQuery中 noConflict() 方法使用
- Git工具 conflict沖突問(wèn)題解決方案
相關(guān)文章
jquery通過(guò)擴(kuò)展select控件實(shí)現(xiàn)支持enter或focus選擇的方法
這篇文章主要介紹了jquery通過(guò)擴(kuò)展select控件實(shí)現(xiàn)支持enter或focus選擇的方法,通過(guò)jQuery針對(duì)select空間增加enter及focus選擇功能分析了jQuery擴(kuò)展的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-11-11
JQury slideToggle閃爍問(wèn)題及解決辦法
在使用slideToggle 的時(shí)候經(jīng)常會(huì)遇到列表收起時(shí)候閃爍的問(wèn)題,一般IE瀏覽器會(huì)有這個(gè)問(wèn)題,其他瀏覽器比如火狐不會(huì)出現(xiàn)閃爍.2011-07-07
jQuery選擇器_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
選擇器是jQuery的核心,一個(gè)選擇器寫(xiě)出來(lái)類(lèi)似$('#dom-id')。下面給大家分享jQuery選擇器的相關(guān)知識(shí),感興趣的朋友一起看看吧2017-07-07
jquery1.5.1中根據(jù)元素ID獲取元素對(duì)象的代碼
盡管聽(tīng)說(shuō)jquery的大名幾年了,但是一直沒(méi)有使用過(guò)。這兩天想在項(xiàng)目中使用被一些小細(xì)節(jié)折騰的夠嗆,看來(lái)jquery沒(méi)有傳說(shuō)中的那么好學(xué)。2011-04-04
利用JQuery動(dòng)畫(huà)制作滑動(dòng)菜單項(xiàng)效果實(shí)現(xiàn)步驟及代碼
滑動(dòng)菜單項(xiàng)效果,聽(tīng)起來(lái)就是很時(shí)尚的一個(gè)效果,不過(guò)實(shí)現(xiàn)起來(lái)有些麻煩,還好有本文的出現(xiàn),可以幫助你解決這個(gè)困惑,熱愛(ài)特效的你可不要錯(cuò)過(guò)了哈,好了話不多說(shuō)切入正文2013-02-02
基于jQuery實(shí)現(xiàn)簡(jiǎn)單的折疊菜單效果
這篇文章主要介紹了基于JQuery實(shí)現(xiàn)簡(jiǎn)單的折疊菜單效果,這個(gè)功能實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,需要的朋友可以參考下2015-11-11
jquery二級(jí)導(dǎo)航內(nèi)容均分的原理及實(shí)現(xiàn)
頭部導(dǎo)航二級(jí)導(dǎo)航有些內(nèi)容太長(zhǎng),一列的話太過(guò)難看,就要分成兩列,要做到按塊盡量均分,排列順序沒(méi)有限制2013-08-08
jquery實(shí)現(xiàn)員工管理注冊(cè)頁(yè)面
這篇文章主要為大家詳細(xì)介紹了jquery實(shí)現(xiàn)員工管理注冊(cè)頁(yè)面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08

