2009-02-09 165 views
66

我的公司已經購買了在頁面上呈現ASP.NET控件的產品。這個控件使用jQuery 1.2.3並在頁面上添加一個腳本標籤來引用它。如果以任何方式修改控件(包括修改引用不同版本的jQuery),控件的開發人員將不支持該控件的使用。如何在同一頁面上運行不同版本的jQuery?

我要開始我自己控制的發展,想使用的功能和jQuery 1.3的速度提升。這兩個控件都需要存在於同一頁面上。

我怎樣才能讓購買控制使用jQuery 1.2.3和新的自定義開發使用jQuery 1.3?同樣出於好奇,如果我們要使用額外的控件來引用另一個jQuery版本呢?

+1

是否控制未發佈更新的作者的作者?還是新版本不兼容? 非常奇怪的是,商業第三方控件供應商創建了一個硬編碼到經常更新的開源javascript特定版本的控件。 – BlackMael 2009-02-09 14:18:49

+0

如果您使用堅持固定版本的jQuery的多服務器控件,我看不出你是如何搞砸的。 – BlackMael 2009-02-09 14:20:58

+1

並非每個插件作者都會定期更新/更新其代碼。我也遇到了這個問題,但後來我轉而採用了經常更新的社區驅動的等價物。 – 2011-12-29 12:30:23

回答

99

您可以通過在no-conflict mode運行你的jQuery的版本實現這一目標。 「無衝突」模式是讓jQuery在其他框架(如prototype)上工作的典型解決方案,也可以在此處使用,因爲它基本上爲您加載的每個jQuery版本命名空間。

<script src="jQuery1.3.js"></script> 
<script> 
    jq13 = jQuery.noConflict(true); 
</script> 

<!-- original author's jquery version --> 
<script src="jQuery1.2.3.js"></script> 

這一變化將意味着任何你想用就需要使用jq13而非$,例如被稱爲jQuery的東西

jq13("#id").hide(); 

它不具有相同的頁面上運行的兩個版本一個理想的情況,但如果你已經別無選擇,那麼上面的方法應該讓你同時使用兩個不同的版本。

也出於好奇,如果我們要使用額外的控件 需要引用另一個版本的jQuery?

如果您需要添加的jQuery的另一個版本,你可以擴展以上:

<script src="jQuery1.3.js"></script> 
<script> 
    jq13 = jQuery.noConflict(true); 
</script> 
<script src="jQuery1.3.1.js"></script> 
<script> 
    jq131 = jQuery.noConflict(true); 
</script> 

<!-- original author's jquery version --> 
<script src="jQuery1.2.3.js"></script> 

變量jq13jq131將分別被用於您所需要的特定版本的功能。

重要的是,由原始開發商使用的jQuery的最後加載 - 原開發者可能會寫的假設$()會使用他們的jQuery的版本下他們的代碼。如果你在他們之後加載另一個版本,$將被你加載的最後一個版本「抓住」,這意味着原始開發者的代碼運行在最新的庫版本上,使得noConflicts有點多餘!

2

這似乎是順序並不重要......例如:http://gist.github.com/136686。控制檯輸出位於頂部,所有版本似乎都位於正確的位置。

24

至於說ConroyP你可以做到這一點與jQuery.noConflict但聲明變量時,不要忘了var。 喜歡這個。

<script src="jQuery1.3.js"></script> 
<script> 
    var jq13 = jQuery.noConflict(true); 
</script> 

<!-- original author's jquery version --> 
<script src="jQuery1.2.3.js"></script> 

您可以通過後功能的})增加(jq13)連接所有$'s到jq13。像這樣

(function($) { 
... 
})(jq13); 
0

在第二個版本中聲明變量爲$ .noConflict(true)。並使用聲明的變量來代替jQuery代碼中使用的$。請檢查下面的代碼:此代碼是jQuery的第二版本的聲明後使用:

<script type="text/javascript"> 
var jQuery_1_9_1 = $.noConflict(true); function pageLoad(sender, args) { 

     var $ddl = jQuery_1_9_1("select[name$=drpClassCode]"); 
     var $ddl1 = jQuery_1_9_1("select[name$=drpSubContractors]"); 
     $ddl.select2(); 
     $ddl1.select2(); 

     $ddl.bind("change keyup", function() { 
      $ddl.fadeIn("slow"); 


     }); 

     $ddl.bind("change keyup", function() { 
      $ddl1.fadeIn("slow"); 


     }); 
    } 
1

使它假工作

var jq16 = $.noConflict(false); 
相關問題