注意:默認情況下jQuery用“$”作為自身的快捷方式。
當我們使用的其他JavaScript庫也是以"$"作為快捷方式時,這個時候如何解決jQuery和其他庫的沖突呢?
1、jQuery庫在其他庫之后導入
在其他庫和jQuery庫都被加載完畢后,可以在任何時候調用jQuery.noConflict()函數將變量$的控制權移交給其他JavaScript庫。
示例:
//...省略其他代碼 <p id="pp">Text-prototype(將被隱藏)</p> <p>Text-jQuery(將被綁定單擊事件)</p> <!-- 引入prototype --> <script src="lib/prototype.js" type="text/javascript"></script> <!-- 引入jQuery --> <script src="../../scripts/jquery.js" type="text/javascript"></script> <script> jQuery.noConflict(); //將變量$的控制權讓渡給prototype.js jQuery(function(){ //使用jQuery jQuery("p").click(function(){ alert( jQuery(this).text() ); }) }) $("pp").style.display = 'none'; //使用prototype隱藏元素 </script>
然后就可以在程序里將jQuery()函數作為jQuery對象的制造工廠。
(2)自定義快捷方式
可以自定義備用名稱,例如jq,$j等等。示例:
var $j = jQuery.noConflict(); //自定義一個快捷方式 $j(function(){ //使用jQuery,利用自定義快捷方式——$j $j("p").click(function(){ alert( $j(this).text() ); }) }) $("pp").style.display = 'none'; //使用prototype.js隱藏元素
(3)使用$而不與其他庫沖突
如果不想給jQuery自定義這些備用名稱,還想使用$而不管其他庫的$()方法,同時又不想與其他庫沖突,可以使用以下兩種解決方法。
其一:
jQuery.noConflict(); //將變量$的控制權讓渡給prototype.js jQuery(function($){ //使用jQuery設定頁面加載時執行的函數 $("p").click(function(){ //在函數內部繼續使用 $()方法 alert( $(this).text() ); }) }) $("pp").style.display = 'none'; //使用prototype
其二:
jQuery.noConflict(); //將變量$的控制權讓渡給prototype.js (function($){ //定義匿名函數并設置形參為$ $(function(){ //匿名函數內部的$均為jQuery $("p").click(function(){ //繼續使用 $ 方法 alert( $(this).text() ); }); }); })(jQuery); //執行匿名函數且傳遞實參jQuery $("pp").style.display = 'none'; //使用prototype
這是一種最理想的方式,可以通過改變最少的代碼來實現全面的兼容性。
如果jQuery庫在其他庫之前導入,那么$()的控制權默認歸屬于后面導入的JavaScript庫。可以直接使用“jQuery”來做一些工作。同時,可以使用$()方法作為其他庫的快捷方式。這里無需調用jQuery.noConflict()函數。示例:
<!-- 先導入jQuery --> <script src="../../scripts/jquery.js" type="text/javascript"></script> <!-- 后導入prototype --> <script src="lib/prototype.js" type="text/javascript"></script> <p id="pp">Test-prototype(將被隱藏)</p> <p >Test-jQuery(將被綁定單擊事件)</p> <script> jQuery(function(){ //直接使用 jQuery ,無需調用"jQuery.noConflict()"函數 jQuery("p").click(function(){ alert( jQuery(this).text() ); }); }); $("pp").style.display = 'none'; //使用prototype </script>
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com