1. 程式人生 > >jQuery和其他庫的衝突

jQuery和其他庫的衝突

在jQuery庫中,幾乎所有的外掛都被限制在它的名稱空間裡。通常,全域性物件都被很好地儲存在jQuery名稱空間裡,因此當把jQuery和其他JavaScript庫一起使用時,不會引起衝突。

1、jQuery庫在其他庫之後匯入

在其他庫和jQuery庫都被載入完畢後,可以在任何時候呼叫jQuery.noConflict()函式來將變數$的控制權移交給其他JavaScript庫。

<!-- 引入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()函式作為jQuery物件的製造工廠。

此外,還有另一種選擇。如果想確保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隱藏元素
其二:
jQuery.noConflict();	//將變數$的控制權交給prototype
	(function($){		//定義匿名函式並設定形參為$
		$(function(){	//匿名函式內部的$均為jQuery
			$("p").click(function(){//繼續使用$()方法
				alert($(this).text());
			});
		});
	})(jQuery);//執行匿名函式且傳遞實參jQuery
	$("pp").style.display = 'none';//使用prototype.js隱藏元素
2、jQuery庫在其他庫之前匯入

如果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了。