2015-10-22 52 views
3

我有一個使用JQuery 1.6的Web應用程序,這是不能改變的。我有一個D3瀏覽器,需要至少1.8版本的版本。我找到了一個解決方案如下:如何有效地使用2個JQuery版本?

<script src='link to jquery 1.10' type="text/javascript"></script> 
<script src='link to jquery custom 1.10' type="text/javascript"></script> 

var jQuery_1_8_2= $.noConflict(true); 

那麼在哪裏使用'$',我現在使用'jQuery_1_8_2'。

這很好,但我有插件JStree。

我需要的是一個函數,基本上當查看器運行時,它將每次使用JQuery都更改爲新版本。所以我不必進入插件的源代碼並將每個'$'字符更改爲'jQuery_1_8_2'。

+0

你可以提供一個簡單的示例?它如何工作以及你想要什麼?你如何使用jstree? – Grundy

+0

@Grundy它需要一段時間,我不認爲你需要知道插件是如何工作的。我只需要一種方式來代替使用變量作爲jquery沒有衝突我需要有一種方式來說,每當我調用這個我使用'$'使用更新版本的jquery – thatOneGuy

+0

我想你只是使用插件錯誤,通常jquery插件使用像'function($,...)'這樣的參數創建函數,並且在插件內部調用''plugin(jQuery)''''''''''可以與外部不一樣。那麼如何包含和使用/設置jstree? – Grundy

回答

3

您可以以JSTree加載的方式訂購JS文件,只有一個版本的JQuery可用,它僅獲取一次JQuery對象,所以在加載後全局值爲$ \ jQuery並沒有問題。

<script src="jquery_for_jstree.js"></script> 
<script src="jstree.js"></script> 
<script> 
var jsTreeJquery = $.noConflict(true); 
</script> 
<script src="another_jQuery.js"></script> 
<script> 
    jsTreeJquery ("...").jstree(...) 
</script> 

你可以看到這種方法工作 http://jsfiddle.net/npd3kc5t/

這工作,因爲JSTree如下protecting alias and adding scope jQuery的建議。

換句話說,當插件加載,它得到了全球jQuery參考,並創建只爲這一個局部變量$,所以不要緊,你有什麼插件加載全球$ \ jQuery後做。

+0

這太好了。我顯然沒有正確理解插件。然而,當我嘗試調用jstree時:「」「$ jQuery_1_11_3(」#list「)。jstree({」plugins「:[」wholerow「,」checkbox「,」sort「,」search「,」state「]}) ;「」「」我得到的錯誤:「」「」$ jQuery_1_11_3(...)。jstree是不是一個函數「」「」 – thatOneGuy

+0

我的變量是$ jQuery_1_11_3和im使用版本Jquery 1.11.3。 – thatOneGuy

+1

你應該檢查你的jquery/js文件加載順序 – Luizgrs

0

使用jQuery沒有衝突

//new version 
var newJquery = jQuery.noConflict(); 
//call it like this 
newJquery('#example').on('click')...... 

對於舊做samething

var oldJquery = jQuery.noConflict(); 
相關問題