成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導航首頁 ? 技術教程 ? jQuery中 $ 符號的沖突問題及解決方案
全站頭部文字 我要出現在這里
jQuery中 $ 符號的沖突問題及解決方案 741 2024-02-13   

在jQuery中,$是jQuery的別名,為了書寫方便,我們更習慣用$('#id')這一類的方式來書寫代碼。當同一頁面引用了jQuery多個版本或者jQuery與某些其他js庫產生沖突,控制臺就會報錯。

同一個頁面多個版本沖突解決辦法

你可能會問,為什么在一個頁面上會引用多個版本的jQuery,只引用一個不就好了嗎?

答案是:不行。一般要用到兩個(或以上)版本的jQuery庫的原因是:現有的網站已經用了舊版本的jQuery以及相關插件,直接將jQuery升級到新版本會導致這些基于舊版本jQuery的插件不能工作,除非你能把這些插件全部升級,或者等各個插件的作者發布支持新版本jQuery的插件版本。  

解決辦法:使用jQuery.noConflict([extreme])方法。

比如我引用的是jquery-1.11.0.js和jquery-1.5.0.js。

<script src="http://www.gimoo.net/t/1811/jquery-1.5.0.js"></script>
<script src="http://www.gimoo.net/t/1811/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>

可以看到jQuery.noConflict將變量 $ 的控制權讓渡給了1.5.0版本的jQuery庫。而要使用1.11.0的版本則要用 $jq() 代替。

但是引入了兩個版本的jQuery后,代碼很亂,導致別人難以理解甚至誤刪了一些重要代碼怎么辦?

改進的方法是:

先直接引用新版的jQuery庫。

<script src="http://www.gimoo.net/t/1811/jquery-1.11.0.js"></script>
<script src="http://www.gimoo.net/t/1811/myJS.js"></script>

把我們寫的腳本myJS.js中的主體內容寫在立即調用函數里頭,引用的是新的版本的jQuery。

//myJS.js
(function() {
//myJS.js的代碼,引用的是v1.11.0
})();

再寫一個立即調用函數,把舊版本的jQuery代碼嵌進去(壓縮代碼只有幾行)。然后在里面寫代碼,此時變量$所引用的前面嵌進去的jQuery

//myJS.js
(function () {
//...此處省略/jquery1.5.0
//jquery1.5.0的壓縮代碼
  var $ = jQuery.noConflict(true);
//此處開始寫的$()所引用的是jquery1.5.0
})();

Ps:需要檢查jQuery的協議是否允許我們把jQuery源碼直接嵌入我們自己的JavaScript代碼

2. 同一頁面jQuery和其他js庫沖突解決方法

①依然可以使用jQuery.noConflict將變量$的控制權讓渡給其他js庫。

如果jQuery在其他js庫前,不需要使用noConflict。 

< 引入 jquery庫 -->
<script src="http://www.gimoo.net/t/1811/jquery-1.11.0.js"></script>
<script type="text/javascript">
var $jq = $;
console.log($.fn.jquery); //'1.11.0'
</script>
< 引入 其他庫-->
<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庫之后,用noConflict讓渡。

< 引入 其他庫-->
<script type="text/javascript">
$ = {
fn:{
jquery:"otherJS"
}
};
</script>
< 引入 jquery庫 -->
<script src="http://www.gimoo.net/t/1811/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>

它的缺點是:在接下來的js代碼中只要引用到jQuery就必須把$換成$jq。

②ready函數是jquery的入口函數

可以將

$(document).ready(function() {...})

替換成:

jQuery(document).ready(function($) {...})

它的缺點是:只對ready嵌套內的代碼有效,如果ready函數外還有一些子函數,對嵌套外的代碼是無效的。

③把$作為參數傳進去

(function($) { 
//你的js代碼 
})(jQuery);

或者

jQuery(function($){ 
//你的js代碼
}

你的js代碼可以包括上面說到的ready函數和子函數。在用jQuery寫公共組件的時候,使用這種方式既能避免$沖突,又無需要求使用公共組件的人修改自己的代碼。

以上所述是小編給大家介紹的jQuery中 $ 符號的沖突問題及解決方案,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對綠夏網網站的支持!



主站蜘蛛池模板: 男生女生向前冲2014| 校园大片ppt| 倒带简谱| 夫妻性视频| 坐月子吃什么| 敦煌夜谭在线观看| 东方电视台节目表今日节目| 缱绻少年人| 男生女生向前冲第六季2014| 无懈可击图片| k总直播间| 卡通频道| 爱一个人好难吉他谱| 调教 打屁股 鞭打 拍击视频| 滨美枝| 哈尔的移动城堡电影| cctv16节目表今天目表| 拿什么拯救你我的爱人剧情简介| 飞哥和小佛| naughty america| 保镖电影大全免费| 狂魔电影| 抖音手机版| 浙江卫视在几台| 光明力量2古代封印攻略| 葛思然| 迪卡娅电影| 风花电影完整版免费观看| 免费看黄网址| 金珊| 巴霍巴利王2国语版在线观看免费| 电影《一闪一闪亮星星》| 烟草二维码识别扫描器| 霹霹乐翻天| 一元二次方程计算题| 四川地图旅游地图高清版大图| call me by your name电影| 电影终结之战 电影| 专治不开心| 大尺度激情戏片段| 韩国我的养父电影免费观看|

!!!站長長期在線接!!!

網站、小程序:定制開發/二次開發/仿制開發等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103