同一頁面jQuery多個版本或和其他js庫衝突方法
阿新 • • 發佈:2019-01-07
jQuery多個版本或和其他js庫衝突主要是常用的$符號的問題,這個問題 jquery早早就有給我們預留處理方法了,下面一起來看看解決辦法。
1.同一頁面jQuery多個版本或衝突解決方法
結果如下:<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title>jQuery測試頁-111cn.net</title> </head> <body> <!-- 引入 jquery 1.8.0 --> <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script> <script type="text/javascript"> var $180 = $; </script> <!-- 引入 jquery 1.9.0 --> <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.0.min.js"></script> <script type="text/javascript"> var $190 = $; </script> <!-- 引入 jquery 2.0.0 --> <script type="text/javascript" src="http://code.jquery.com/jquery-2.0.0.min.js"></script> <script type="text/javascript"> var $200 = $; </script> <script type="text/javascript"> console.log($180.fn.jquery); console.log($190.fn.jquery); console.log($200.fn.jquery); </script> </body> </html>
1.8.0
1.9.0
2.0.0
2.同一頁面jQuery和其他js庫衝突解決方法
①.jQuery在其他js庫前
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title>jQuery測試頁-111cn.net</title> </head> <body> <!-- 引入 jquery 1.8.0 --> <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script> <script type="text/javascript"> var $180 = $; console.log($.fn.jquery); </script> <!-- 引入 其他庫--> <script type="text/javascript"> $ = { fn:{ jquery:"111cn.net" } }; </script> <script type="text/javascript"> console.log($.fn.jquery); console.log($180.fn.jquery); </script> </body> </html>
結果如下:
1.8.0
mzwu.com
1.8.0
②.jQuery在其他js庫後
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title>jQuery測試頁-111cn.net</title> </head> <body> <!-- 引入 其他庫--> <script type="text/javascript"> $ = { fn:{ jquery:"111cn.net" } }; </script> <!-- 引入 jquery 1.8.0 --> <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script> <script type="text/javascript"> console.log($.fn.jquery); var $180 = $.noConflict(); console.log($.fn.jquery); console.log($180.fn.jquery); </script> </body> </html>
結果如下:
1.8.0
mzwu.com
1.8.0
再補充一下方法
方案1:
引入noConflict(),將$替換為其他符號
var $j = jQuery.noConflict();
$j(document).ready(function(){
$j("#btn1").click(function(){
alert("Text: " + $j("#test").text());
});
});
缺點:引入了這段程式碼後,不僅是當前的js檔案,該html引用的所有js中,如果有用到jquery中的$,都得用$j來代替之前的$方案2:
ready函式是jquery的入口函式,可以
將$(document).ready(function(){
替換成
jQuery( document ).ready(function( $){}
缺點:只對ready巢狀內的程式碼有效,對巢狀外的程式碼是無效的。如果你所有的邏輯,都在寫ready函式中,那沒問題。但我們一般都會在ready函式之外寫一些子函式,然後ready函式再去呼叫這些函式。這個方案對這些函式是無效的,因此這套方案有侷限性。方案3(推薦,特別是開發js外掛時):
給js內容包上一個函式
jQuery(function($){
//你的js程式碼放在這裡(例如第二個方案提到的ready函式和子函式)
//如果是js檔案,其實就是在檔案頭部和尾部各加一行程式碼
}
或者
(function($) {
//你的js程式碼
})(jQuery);
這個方法,沒有上面兩個方案的缺點,只會影響到被包在jQuery(function($){}中的程式碼。 不會影響到其他js程式碼,這一點很重要。試想一下,假如你寫了一
個js公共元件,該元件需要用到jquery,為了提高魯棒性,需考慮$符號衝突問題。如果使用方案1,那麼別人在使用時,還得遵守你的約定,把自己js程式碼
中的$改成$,而如果使用方案3,既能避免$衝突對該元件的影響,又無需要求使用公共元件的人修改自己的程式碼。