多庫(kù)共存換句話說(shuō)可以叫無(wú)沖突處理。
總的來(lái)說(shuō)會(huì)有2種情況會(huì)遇到:
1、$太火熱,jQuery采用$作為命名空間,不免會(huì)與別的庫(kù)框架或者插件相沖突。
2、jQuery版本更新太快,插件跟不上,導(dǎo)致不同版本對(duì)插件的支持度不一樣。
出于以上的原因,jQuery給出了解決方案–– noConflict函數(shù)。
引入jQuery運(yùn)行這個(gè)noConflict函數(shù)將變量$的控制權(quán)讓給第一個(gè)實(shí)現(xiàn)它的那個(gè)庫(kù),確保jQuery不會(huì)與其他庫(kù)的$對(duì)象發(fā)生沖突。
在運(yùn)行這個(gè)函數(shù)后,就只能使用jQuery變量訪問(wèn)jQuery對(duì)象。例如,在要用到$("aaron")的地方,就必須換成jQuery("aaron"),因?yàn)?的控制權(quán)已經(jīng)讓出去了。
使用DEMO:
jQuery.noConflict();
// 使用 jQuery
jQuery("aaron").show();
// 使用其他庫(kù)的 $()
$("aaron").style.display = ‘block’;
這個(gè)函數(shù)必須在你導(dǎo)入jQuery文件之后,并且在導(dǎo)入另一個(gè)導(dǎo)致沖突的庫(kù)之前使用。當(dāng)然也應(yīng)當(dāng)在其他沖突的庫(kù)被使用之前,除非jQuery是最后一個(gè)導(dǎo)入的。
由于比較簡(jiǎn)單,我們直接上代碼解說(shuō):
Var _jQuery = window.jQuery, _$ = window.$; jQuery.noConflict = function( deep ) { if ( window.$ === jQuery ) { window.$ = _$; } if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } return jQuery; };
如果我們需要同時(shí)使用jQuery和其他JavaScript庫(kù),我們可以使用 $.noConflict()把$的控制權(quán)交給其他庫(kù)。舊引用的$ 被保存在jQuery的初始化; noConflict() 簡(jiǎn)單的恢復(fù)它們。
通過(guò)類似swap交換的概念,先把之前的存在的命名空間給緩存起來(lái),通過(guò)對(duì)比當(dāng)前的命名空間達(dá)到交換的目的,首先,我們先判斷下當(dāng)前的的$空間是不是被jQuery接管了,如果是則讓出控制權(quán)給之前的_$引用的庫(kù),如果傳入deep為true的話等于是把jQuery的控制權(quán)也讓出去了。
如果不通過(guò)noConflict處理的話其后果可想而知,香噴噴的$大家都“覬覦已久”。
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過(guò)多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求
打開(kāi)微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書(shū)簽
舉報(bào)