解決jquery和prototype庫沖突問題


  在項目中同時引入了jquery.js和prototype.js兩個文件,在方法調用時啟了沖突。

  我們在使用 jQuery 的過程中我們會頻繁使用 $ 符號,$是JQuery的別名,所有使用$的地方也都可以使用JQuery來替換,例如 如$('#msg')等同於JQuery('#msg')的寫法。

  在頁面中同時引入另一個js類庫,並且該類庫也是用了 $ 符號時,$ 代表的變量將被覆蓋。例如 prototype.js。

  舉例:

  A.jquery.js 在 prototype.js 之前引入

<script src="jquery.js" type="text/javascript"/> 
<script src="prototype.js" type="text/javascript"/>

  在這種情況下,我們在自己的js代碼中如下寫的話:

  $('#msg').hide();

  $此時代表的prototype.js中定義的$符號,如果我們想要調用jquery.js中的工廠選擇函數功能的話,只能用全稱寫法JQuery('#msg').hide();

  B.jquery.js 在 prototype.js 之后引入

  在這種情況下,我們在自己的js代碼中如下寫的話:$('#msg').hide();

  $永遠代表的是jquery中定義的$符號,也可以寫成JQuery('#msg').hide();prototype.js中定義的$則被覆蓋了。 

  解決的方法 1:在編寫完 使用了 jquery 中的 $的代碼后 用JQuery.noConflict();

  來讓Jquery放棄對$的所有權,將$的控制權交還給prototype.js,因為jquery.js是后引入的,所以最后擁有$控制權的是jquery,當在代碼中調用了該 方法以后,我們就不可以使用$來調用jquery的方法了,而要使用 jQuery() 方法。

  解決的方法 2:自定義jquery 的別名

var $j=JQuery.noConflict(); 
$j('#msg').hide();//此處$j就代表JQuery 

  使用如上代碼,自此以后$就代表prototype.js中定義的$,jquey.js中的$無法再使用,只能使用$j來作為jquey.js中JQuery的別名了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM