Magento的發佈版本里的JS大可能是用Prototype寫的,若是須要引入jQuery的話,可能有些變量會衝突,因此須要作些處理來處理jQuery和Prototype的兼容性。javascript
使用jQuery.noConflict();主要做用是在任什麼時候候,只要在jQuery加載後就能夠調用,將$符號的使用權返回給其它的js庫,jQuery在建立它本身的名字空間時就將其它庫的$保存在本身的一個變量當中。php
<html> <head> <script src="prototype.js"></script> <script src="jquery.js"></script> <script type="text/javascript" > //各個js庫之間的主要衝突在於$的衝突,這個方法是用來處理這個問題的 jQuery.noConflict(); //本來使用jQuery代碼部分的$ 用jQuery替代 jQuery(document).ready(function (){ jQuery("div").hide(); }); // Use Prototype with $(...), etc. $('proto').hide(); </script> </head> <body></body> </html>
方法二:若是你仍然想使用相似於$這樣比較簡短的字符,你能夠將jQuery.noConflict()的返回值賦值給某個變量。這個變量就是jQuery的新縮寫了,固然你可使用$之外的任意字符串,好比:html
<html> <head> <script src="prototype.js"></script> <script src="jquery.js"></script> <script type="text/javascript" > //$j就至關於jQuery,名稱你能夠自主定義 var $j = jQuery.noConflict(); // Use jQuery via $j(...) $j(document).ready(function (){ $j("div").hide(); }); // Use Prototype with $(...), etc. $('proto').hide(); </script> </head> <body></body> </html>
方法三:若是你仍是想使用$,而不想使用別的字符,也是能夠的。並且一般程序員都比較喜歡這樣作,由於這樣作寫好的代碼幾乎都不用替換原來的$符號。那就是利用名字空間的概念就全部的jQuery代碼封裝在document的ready事件名字空間範圍內,如:jQuery(document).ready(這裏填入jQuery代碼),Magento筆記喜歡使用這種方法:java
<html> <head> <script src="prototype.js"></script> <script src="jquery.js"></script> <script type="text/javascript" > jQuery.noConflict(); // Put all your code in your document ready area jQuery(document).ready(function ($){ // 這樣你能夠在這個範圍內隨意使用$而不用擔憂衝突 $("div" ).hide(); }); // Use Prototype with $(...), etc. $('proto' ).hide(); </script> </head> <body></body> </html>
按照這樣的順序加載,就不存在其它js庫的$符號被jQuery佔用的問題。因此對其它的js庫的代碼能夠不做任何修改,照常使用$,而對 jQuery可使用jQuery來替代$.如:jquery
<html> <head> <script src="prototype.js"></script> <script src="jquery.js"></script> <script type="text/javascript" > // 使用 jQuery 用 jQuery(...) jQuery(document).ready(function (){ jQuery("div" ).hide(); }); // 使用 Prototype 時,用 $(...), $('someid' ).hide(); </script> </head> <body></body> </html>
或者你不想寫jQuery這麼長的字符,你能夠經過另一種方法:程序員
var $j = jQuery;
來實現簡短一點的$j,這多是最好的辦法了。
不過,當你只想使用jQuery來寫代碼時,你能夠經過名字空間仍然使用$,即採用和jQuery源代碼同樣的方法:ide
<script type="text/javascript" > (function($) { /* 在這個名字空間內,你能夠隨意使用$符號來引用jQuery,只不過是其它$被jQuery使用,你不能使用prototype或其它的js庫 */ } )(jQuery) </script>
參考來源:http://docs.jquery.com/Using_jQuery_with_Other_Libraries spa