jQuery和其他庫的衝突
阿新 • • 發佈:2019-01-07
在jQuery庫中,幾乎所有的外掛都被限制在它的名稱空間裡。通常,全域性物件都被很好地儲存在jQuery名稱空間裡,因此當把jQuery和其他JavaScript庫一起使用時,不會引起衝突。
1、jQuery庫在其他庫之後匯入
在其他庫和jQuery庫都被載入完畢後,可以在任何時候呼叫jQuery.noConflict()函式來將變數$的控制權移交給其他JavaScript庫。
然後,就可以在程式裡將jQuery()函式作為jQuery物件的製造工廠。<!-- 引入prototype --> <script type="text/javascript" src="prototype.js"></script> <!-- 引入jQuery --> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> jQuery.noConflict(); //將變數$的控制權交給prototype jQuery(function(){ //使用jQuery jQuery("p").click(function(){ alert(jQuery(this).text()); }); }); $("pp").style.display = 'none';//使用prototype.js隱藏元素 </script>
此外,還有另一種選擇。如果想確保jQuery不會與其他庫衝突,但又想自定義一個快捷方式,可以進行如下操作:
var $j = jQuery.noConflict(); //自定義一個快捷方式
$j(function(){ //使用jQuery,利用自定義快捷方式——$j
$j("p").click(function(){
alert($j(this).text());
});
});
$("pp").style.display = 'none'; //使用prototype.js隱藏元素
可以自定義備用名稱jq $J等。
如果不想給jQuery自定義這些備用名稱,還想使用$而不管其他庫的$()方法,同時又不想與其他庫相沖突,那麼可以使用以下兩種解決方法。
其一:
jQuery.noConflict(); //將變數$的控制權交給prototype
jQuery(function($){ //使用jQuery設定頁面載入時執行的函式
$("p").click(function(){ //在函式內部繼續使用$()方法
alert($(this).text());
});
});
$("pp").style.display = 'none';//使用prototype.js隱藏元素
其二:2、jQuery庫在其他庫之前匯入jQuery.noConflict(); //將變數$的控制權交給prototype (function($){ //定義匿名函式並設定形參為$ $(function(){ //匿名函式內部的$均為jQuery $("p").click(function(){//繼續使用$()方法 alert($(this).text()); }); }); })(jQuery);//執行匿名函式且傳遞實參jQuery $("pp").style.display = 'none';//使用prototype.js隱藏元素
如果jQuery庫在其他庫之前就匯入了,那麼可以直接使用jQuery來做一些jQuery的工作。同時,可以使用$()方法作為其他庫的快捷方式。這裡無需呼叫jQuery.noConflict()函式。
<!-- 先匯入jQuery -->
<script type="text/javascript" src="jquery.js"></script>
<!-- 後匯入prototype -->
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
jQuery(function(){ //直接使用jQuery,無需呼叫jQuery.noConflict()函式
jQuery("p").click(function(){
alert(jQuery(this).text());
});
});
$("pp").style.display = 'none';//使用prototype.js隱藏元素
</script>
有了這些方法來解決衝突,就可以在專案中放心地引用jQuery了。