2016-09-02 43 views
0

我依靠大量的jQuery的網頁上正常運行1.9.1功能,而網站本身依靠的jQuery 1.7.1。首先加載1.7.1,並且所有插件都會針對它執行。在添加任何插件腳本1.9.1之後的某些頁面上,並將其分配給$.noConflict(true)的變量。問題是我需要訪問jQuery UI和其他一些來自1.9.1對象的雜項插件。是否有可能將所有插件從一個版本的jQuery對象複製到另一個版本?

有沒有我可以從第二個版本涉及到一些常見的插件參數什麼的?可能是什麼樣的jQuery191.plugins = $.plugins?或者我必須在我的noConflict之前重新加載jQuery插件文件?

回答

3

我敢肯定,這不用說,但理想的更新站點使用一個單一的,向上的最新版本的jQuery,這使得這個問題消失。

但是,您的問題的答案是否定的,您至少不能複製它們  —,而不是使用正確編寫的插件。一個正確設計的插件的高級結構是沿着這些路線:

(function($) { 
    // Do things with $ here, such as registering a plugin function: 
    $.fn.thePlugin = function() { 
     // ...and presumably here as well... 
    }; 
})(jQuery); 

這意味着插件有將jQuery的版本控制的jQuery符號加載插件時的參考。

後來,加載不同版本的jQuery後,你可能會做到這一點:

jQuery.fn.thePlugin = oldJQuery.fn.thePlugin; 

...但你不得不jQuery的版本之間可怕的串擾:該插件會由較新的jQuery調用,但在做它的事情時使用較舊的jQuery。

現在,正好與我的greenPlugin上述

所以,直到你可以清理東西,你必須複製你的插件加載:

<script src="jquery-1.7.1.js"></script> 
<script src="this-plugin.js"></script> 
<script src="that-plugin.js"></script> 
<script src="the-other-plugin.js"></script> 
<script> 
var jq171 = jQuery.noConflict(); // With or without `true` 
</script> 
<script src="jquery-1.9.1.js"></script> 
<script src="this-plugin.js"></script> 
<script src="that-plugin.js"></script> 
<script src="the-other-plugin.js"></script> 

...這顯然是醜陋。 :-)但是腳本至少會第二次來自緩存。它意味着的jQuery的訪問和版本通過jq171通過jQuery/$的一個訪問都有三個插件。

+0

你真的需要顯示'.noConflict()'語句,如果你要顯示的jQuery的兩個版本的加載。 – jfriend00

+0

@ jfriend00:從技術上講,他們不是必需的例子,但是,我可能應該。 *編輯:*所以我有。 :-) –

+0

謝謝您的信息。我只是實現了文件捆綁,我不想處理拆分包,所以我只是想升級並希望獲得最好的結果。有什麼地方可以找到可能的升級衝突嗎? – Marie

相關問題