jQuery中 $ 符號(hào)的沖突問(wèn)題及解決方案
在jQuery中,$是jQuery的別名,為了書(shū)寫(xiě)方便,我們更習(xí)慣用$('#id')這一類的方式來(lái)書(shū)寫(xiě)代碼。當(dāng)同一頁(yè)面引用了jQuery多個(gè)版本或者jQuery與某些其他js庫(kù)產(chǎn)生沖突,控制臺(tái)就會(huì)報(bào)錯(cuò)。
同一個(gè)頁(yè)面多個(gè)版本沖突解決辦法
你可能會(huì)問(wèn),為什么在一個(gè)頁(yè)面上會(huì)引用多個(gè)版本的jQuery,只引用一個(gè)不就好了嗎?
答案是:不行。一般要用到兩個(gè)(或以上)版本的jQuery庫(kù)的原因是:現(xiàn)有的網(wǎng)站已經(jīng)用了舊版本的jQuery以及相關(guān)插件,直接將jQuery升級(jí)到新版本會(huì)導(dǎo)致這些基于舊版本jQuery的插件不能工作,除非你能把這些插件全部升級(jí),或者等各個(gè)插件的作者發(fā)布支持新版本jQuery的插件版本?! ?/p>
解決辦法:使用jQuery.noConflict([extreme])方法。
比如我引用的是jquery-1.11.0.js和jquery-1.5.0.js。
<script src="jquery-1.5.0.js"></script> <script src="jquery-1.11.0.js"></script> <script> console.log($.fn.jquery); //'1.11.0' var $jq = jQuery.noConflict(true); console.log($.fn.jquery); //'1.5.0' </script>
可以看到j(luò)Query.noConflict將變量 $ 的控制權(quán)讓渡給了1.5.0版本的jQuery庫(kù)。而要使用1.11.0的版本則要用 $jq() 代替。
但是引入了兩個(gè)版本的jQuery后,代碼很亂,導(dǎo)致別人難以理解甚至誤刪了一些重要代碼怎么辦?
改進(jìn)的方法是:
先直接引用新版的jQuery庫(kù)。
<script src="jquery-1.11.0.js"></script> <script src="myJS.js"></script>
把我們寫(xiě)的腳本myJS.js中的主體內(nèi)容寫(xiě)在立即調(diào)用函數(shù)里頭,引用的是新的版本的jQuery。
//myJS.js
(function() {
//myJS.js的代碼,引用的是v1.11.0
})();
再寫(xiě)一個(gè)立即調(diào)用函數(shù),把舊版本的jQuery代碼嵌進(jìn)去(壓縮代碼只有幾行)。然后在里面寫(xiě)代碼,此時(shí)變量$所引用的前面嵌進(jìn)去的jQuery
//myJS.js
(function () {
//...此處省略/jquery1.5.0
//jquery1.5.0的壓縮代碼
var $ = jQuery.noConflict(true);
//此處開(kāi)始寫(xiě)的$()所引用的是jquery1.5.0
})();
Ps:需要檢查jQuery的協(xié)議是否允許我們把jQuery源碼直接嵌入我們自己的JavaScript代碼
2. 同一頁(yè)面jQuery和其他js庫(kù)沖突解決方法
①依然可以使用jQuery.noConflict將變量$的控制權(quán)讓渡給其他js庫(kù)。
如果jQuery在其他js庫(kù)前,不需要使用noConflict?!?/p>
<!-- 引入 jquery庫(kù) -->
<script src="jquery-1.11.0.js"></script>
<script type="text/javascript">
var $jq = $;
console.log($.fn.jquery); //'1.11.0'
</script>
<!-- 引入 其他庫(kù)-->
<script type="text/javascript">
$ = {
fn:{
jquery:"otherJS"
}
};
</script>
<script type="text/javascript">
console.log($.fn.jquery); //otherJS
console.log($jq.fn.jquery); //'1.11.0'
</script>
如果在其他js庫(kù)之后,用noConflict讓渡。
<!-- 引入 其他庫(kù)-->
<script type="text/javascript">
$ = {
fn:{
jquery:"otherJS"
}
};
</script>
<!-- 引入 jquery庫(kù) -->
<script src="jquery-1.11.0.js"></script>
<script type="text/javascript">
console.log($.fn.jquery); //'1.11.0'
var $180 = $.noConflict(); //解除沖突
console.log($.fn.jquery); //otherJS
console.log($jq.fn.jquery); //'1.11.0'
</script>
它的缺點(diǎn)是:在接下來(lái)的js代碼中只要引用到j(luò)Query就必須把$換成$jq。
②ready函數(shù)是jquery的入口函數(shù)
可以將
$(document).ready(function() {...})
替換成:
jQuery(document).ready(function($) {...})
它的缺點(diǎn)是:只對(duì)ready嵌套內(nèi)的代碼有效,如果ready函數(shù)外還有一些子函數(shù),對(duì)嵌套外的代碼是無(wú)效的。
③把$作為參數(shù)傳進(jìn)去
(function($) {
//你的js代碼
})(jQuery);
或者
jQuery(function($){
//你的js代碼
}
你的js代碼可以包括上面說(shuō)到的ready函數(shù)和子函數(shù)。在用jQuery寫(xiě)公共組件的時(shí)候,使用這種方式既能避免$沖突,又無(wú)需要求使用公共組件的人修改自己的代碼。
以上所述是小編給大家介紹的jQuery中 $ 符號(hào)的沖突問(wèn)題及解決方案,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
jquery實(shí)現(xiàn)的代替?zhèn)鹘y(tǒng)checkbox樣式插件
這篇文章主要介紹了jquery實(shí)現(xiàn)的代替?zhèn)鹘y(tǒng)checkbox樣式插件,可實(shí)現(xiàn)滑動(dòng)選擇的效果,需要的朋友可以參考下2015-06-06
jquery實(shí)現(xiàn)文字由下到上循環(huán)滾動(dòng)的實(shí)例代碼
這篇文章介紹了jquery實(shí)現(xiàn)文字由下到上循環(huán)滾動(dòng)的實(shí)例代碼,有需要的朋友可以參考一下2013-08-08
jQuery實(shí)現(xiàn)導(dǎo)航滾動(dòng)到指定內(nèi)容效果完整實(shí)例【附demo源碼下載】
這篇文章主要介紹了jQuery實(shí)現(xiàn)導(dǎo)航滾動(dòng)到指定內(nèi)容效果,結(jié)合完整實(shí)例形式分析了頁(yè)面元素屬性動(dòng)態(tài)變換操作相關(guān)技巧,涉及jQuery插件jquery.scrollto.js的使用,并附帶demo源碼下載供讀者下載參考,需要的朋友可以參考下2016-09-09
基于jquery的lazy loader插件實(shí)現(xiàn)圖片的延遲加載[簡(jiǎn)單使用]
當(dāng)網(wǎng)站上有大量圖片要展示的話,如果一次把所有的圖片都加載出來(lái)的話,這勢(shì)必會(huì)影響網(wǎng)站的加載速度,給用戶帶來(lái)比較差的體驗(yàn)。2011-05-05
Jquery 一次處理多個(gè)ajax請(qǐng)求的代碼
Jquery 一次處理多個(gè)ajax請(qǐng)求的代碼,需要的朋友可以參考下。2011-09-09
jQuery用noConflict代替$的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇jQuery用noConflict代替$的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
jQuery實(shí)現(xiàn)廣告條滾動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了jQuery實(shí)現(xiàn)廣告條滾動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
jQuery實(shí)現(xiàn)炫麗的3d旋轉(zhuǎn)星空效果
這篇文章主要介紹了jQuery實(shí)現(xiàn)炫麗的3d旋轉(zhuǎn)星空效果,涉及jQuery數(shù)值運(yùn)算與頁(yè)面元素屬性動(dòng)態(tài)變換相關(guān)操作技巧,需要的朋友可以參考下2018-07-07

