Jquery與Prototype混合用法對(duì)比
更新時(shí)間:2008年09月17日 00:22:03 作者:
jQuery和prototype都是現(xiàn)在比較流行的Javascript開發(fā)框架,兩者都擁有數(shù)量相當(dāng)?shù)姆劢z,當(dāng)然不排除同時(shí)喜歡使用兩種框架的。
但問(wèn)題來(lái)了,由于jQuery以及prototype都使用了美元符函數(shù)“$”作為選擇器,在兩者混合使用的時(shí)候$函數(shù)被重復(fù)定義了,結(jié)果導(dǎo)致其中一個(gè)框架不能使用。
不過(guò)很快,有很多人給出了解決方案,如比較流行的方案是這樣的:
<script src="http://jquery.com/src/latest/"></script>
<script type="text/javascript">
JQ = $; //rename $ function
</script>
<script src="prototype.js"></script>
<script src="http://jquery.com/src/latest/"></script>
<script type="text/javascript">
JQ = $; //rename $ function
</script>
<script src="prototype.js"></script>
這樣一來(lái),你可以使用JQ來(lái)代替jQuery里的$函數(shù)名,而prototype的$函數(shù)照常使用,像這樣:
<script type="text/javascript">
JQ(document).ready(function(){
JQ("#test_jquery").html("this is jquery");
$("test_prototype").innerHTML="this is prototype";
});
</script>
<script type="text/javascript">
JQ(document).ready(function(){
JQ("#test_jquery").html("this is jquery");
$("test_prototype").innerHTML="this is prototype";
});
</script>
盡管這種辦法在一定程度上解決了兩者的沖突,但作為jQuery的死忠,我是萬(wàn)分不情愿改寫$為JQ或其他替代的字符。反之Prototype的粉絲估計(jì)也會(huì)這樣想。那么,是不是有另一種解決方案,讓兩種框架能和諧共處呢?現(xiàn)在流行和諧嘛!
另類解法:先看一小段代碼,猜一下會(huì)有什么效果?
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
應(yīng)該很簡(jiǎn)單吧?效果是彈出一個(gè)窗品說(shuō)“helloworld”。仔細(xì)看這一段Script,前后有兩個(gè)括號(hào)組成,第一個(gè)括號(hào)里面是一個(gè)function對(duì)象,第二個(gè)括號(hào)是一個(gè)字符串??梢赃@樣理解,第一個(gè)括號(hào)里面定義了一個(gè)函數(shù),第二個(gè)括號(hào)里面給出的參數(shù),兩個(gè)加在一起實(shí)際上是完成了一次函數(shù)調(diào)用!
那現(xiàn)在來(lái)點(diǎn)真實(shí)的:
<script type="text/javascript" src="jquery-1.2.6.js">
</script>
<script type="text/javascript" src="prototype-1.6.0.2.js">
</script>
<div id="test_jquery"></div>
<div id="test_prototype"></div>
<script type="text/javascript">
<!--
(function($){
$(document).ready(function(){
alert($("#test_jquery").html("this is jqeury"));
});
})(jQuery);
$("test_prototype").innerHTML="this is prototype";
//-->
</script>
<script type="text/javascript" src="jquery-1.2.6.js"> </script>
<script type="text/javascript" src="prototype-1.6.0.2.js"> </script>
<div id="test_jquery"></div>
<div id="test_prototype"></div>
<script type="text/javascript">
<!--
(function($){ $(document).ready(function(){ alert($("#test_jquery").html("this is jqeury")); }); })(jQuery); $("test_prototype").innerHTML="this is prototype"; //--> </script>
經(jīng)測(cè)試,jQuery與Prototpye工作均正常。唯一以往常不一樣的是,我們要在以前寫的Jquery外面加多一個(gè)外套:
(function($){
//這里寫Jquery代碼
})(jQuery);
(function($){
//這里寫Jquery代碼 })(jQuery);
這個(gè)外套巧妙地利用函數(shù)局部變量的有效范圍保證你可以安心地按原來(lái)的方式寫Jquery代碼,這個(gè)方案更合適現(xiàn)有Jquery的代碼升級(jí)至Jquery + prototypt。
不足之處:
還是不能解決Jquery插件的問(wèn)題,這個(gè)問(wèn)題是傳統(tǒng)方法也無(wú)法解決的,只能夠手動(dòng)去修改插件腳本里面對(duì)$的調(diào)用,而根本的解決辦法是以后的插件都用剛才那種另類的方式去寫,才能保證其可用性。而Jquery UI現(xiàn)在好像是這樣做了,我從Demo的源碼里面看到的。
不過(guò)很快,有很多人給出了解決方案,如比較流行的方案是這樣的:
復(fù)制代碼 代碼如下:
<script src="http://jquery.com/src/latest/"></script>
<script type="text/javascript">
JQ = $; //rename $ function
</script>
<script src="prototype.js"></script>
<script src="http://jquery.com/src/latest/"></script>
<script type="text/javascript">
JQ = $; //rename $ function
</script>
<script src="prototype.js"></script>
這樣一來(lái),你可以使用JQ來(lái)代替jQuery里的$函數(shù)名,而prototype的$函數(shù)照常使用,像這樣:
復(fù)制代碼 代碼如下:
<script type="text/javascript">
JQ(document).ready(function(){
JQ("#test_jquery").html("this is jquery");
$("test_prototype").innerHTML="this is prototype";
});
</script>
<script type="text/javascript">
JQ(document).ready(function(){
JQ("#test_jquery").html("this is jquery");
$("test_prototype").innerHTML="this is prototype";
});
</script>
盡管這種辦法在一定程度上解決了兩者的沖突,但作為jQuery的死忠,我是萬(wàn)分不情愿改寫$為JQ或其他替代的字符。反之Prototype的粉絲估計(jì)也會(huì)這樣想。那么,是不是有另一種解決方案,讓兩種框架能和諧共處呢?現(xiàn)在流行和諧嘛!
另類解法:先看一小段代碼,猜一下會(huì)有什么效果?
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
應(yīng)該很簡(jiǎn)單吧?效果是彈出一個(gè)窗品說(shuō)“helloworld”。仔細(xì)看這一段Script,前后有兩個(gè)括號(hào)組成,第一個(gè)括號(hào)里面是一個(gè)function對(duì)象,第二個(gè)括號(hào)是一個(gè)字符串??梢赃@樣理解,第一個(gè)括號(hào)里面定義了一個(gè)函數(shù),第二個(gè)括號(hào)里面給出的參數(shù),兩個(gè)加在一起實(shí)際上是完成了一次函數(shù)調(diào)用!
那現(xiàn)在來(lái)點(diǎn)真實(shí)的:
復(fù)制代碼 代碼如下:
<script type="text/javascript" src="jquery-1.2.6.js">
</script>
<script type="text/javascript" src="prototype-1.6.0.2.js">
</script>
<div id="test_jquery"></div>
<div id="test_prototype"></div>
<script type="text/javascript">
<!--
(function($){
$(document).ready(function(){
alert($("#test_jquery").html("this is jqeury"));
});
})(jQuery);
$("test_prototype").innerHTML="this is prototype";
//-->
</script>
<script type="text/javascript" src="jquery-1.2.6.js"> </script>
<script type="text/javascript" src="prototype-1.6.0.2.js"> </script>
<div id="test_jquery"></div>
<div id="test_prototype"></div>
<script type="text/javascript">
<!--
(function($){ $(document).ready(function(){ alert($("#test_jquery").html("this is jqeury")); }); })(jQuery); $("test_prototype").innerHTML="this is prototype"; //--> </script>
經(jīng)測(cè)試,jQuery與Prototpye工作均正常。唯一以往常不一樣的是,我們要在以前寫的Jquery外面加多一個(gè)外套:
復(fù)制代碼 代碼如下:
(function($){
//這里寫Jquery代碼
})(jQuery);
(function($){
//這里寫Jquery代碼 })(jQuery);
這個(gè)外套巧妙地利用函數(shù)局部變量的有效范圍保證你可以安心地按原來(lái)的方式寫Jquery代碼,這個(gè)方案更合適現(xiàn)有Jquery的代碼升級(jí)至Jquery + prototypt。
不足之處:
還是不能解決Jquery插件的問(wèn)題,這個(gè)問(wèn)題是傳統(tǒng)方法也無(wú)法解決的,只能夠手動(dòng)去修改插件腳本里面對(duì)$的調(diào)用,而根本的解決辦法是以后的插件都用剛才那種另類的方式去寫,才能保證其可用性。而Jquery UI現(xiàn)在好像是這樣做了,我從Demo的源碼里面看到的。
您可能感興趣的文章:
- 找到了一篇jQuery與Prototype并存的沖突的解決方法
- 解析prototype,JQuery中跳出each循環(huán)的方法
- jquery與prototype框架的詳細(xì)對(duì)比
- jQuery.fn和jQuery.prototype區(qū)別介紹
- 解析jQuery與其它js(Prototype)庫(kù)兼容共存
- jQuery.prototype.init選擇器構(gòu)造函數(shù)源碼思路分析
- JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的區(qū)別和應(yīng)用場(chǎng)景簡(jiǎn)述
- prototype與jquery下Ajax實(shí)現(xiàn)的差別
- jQuery prototype沖突的2種解決方法(附demo示例下載)
相關(guān)文章
不錯(cuò)的一篇關(guān)于javascript-prototype繼承
不錯(cuò)的一篇關(guān)于javascript-prototype繼承...2007-08-08JavaScript使用prototype定義對(duì)象類型
JavaScript使用prototype定義對(duì)象類型...2007-02-02Prototype String對(duì)象 學(xué)習(xí)
這個(gè)對(duì)象里面的方法就是提供了一些字符串操作的工具方法,比較重要的gsub方法,下面做了詳細(xì)的注釋,簡(jiǎn)單的方法就不說(shuō)了,一看就明白了。2009-07-07Prototype Number對(duì)象 學(xué)習(xí)
這個(gè)對(duì)象提供一些操作數(shù)值類型的工具函數(shù)2009-07-07Prototype Hash對(duì)象 學(xué)習(xí)
這個(gè)對(duì)象相當(dāng)于Java中的HashMap,當(dāng)然了功能沒HashMap那么強(qiáng)大。提供一直基本的方法,簡(jiǎn)單的方法就不在源碼中注釋了。2009-07-07Prototype1.5 rc2版指南最后一篇之Position
Prototype1.5 rc2版指南最后一篇之Position...2007-01-01