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