簡體   English   中英

是否可以在同一頁面上使用2個版本的jQuery?

[英]Is it possible to use 2 versions of jQuery on the same page?

注意:我知道在這里這里已經提出類似的問題,但我正在尋找關於如何完成這項工作或完全避免它的充分理由的補充說明。

我正在為已經使用舊版jQuery庫(1.1.3.1)的現有網站添加功能。 我一直在針對最新版本的jQuery庫(1.4.2)編寫我的附加功能。 我只使用較新版本的jQuery測試了網站,它打破了功能,所以現在我正在考慮在同一頁面上使用這兩個版本。 這怎么可能?

在我的代碼中我需要做什么來指定我使用的是一個版本的jQuery而不是另一個版本? 例如,我將把jQuery的兩個版本的<script>標簽放在我頁面的標題中,但是我需要做什么才能確保在我的調用代碼中我知道我正在調用一個版本的庫或其他?

也許是這樣的:

//Put some code here to specify a variable that will be using the newer
//version of jquery:
var $NEW = jQuery.theNewestVersion();

//Now when I use $NEW, I'll know it's the newest version and won't
//conflict with the older version.
$NEW('#personName').text('Ben');

//And when I use the original $ in code, or simply 'jquery', I'll know
//it's the older version.
$('#personName').doSomethingWithTheOlderVersion();

更新:在閱讀了一些答案后,我開始懷疑嘗試玩這個游戲是不是一個好主意......

您可以使用jQuery noConflict方法來實現此目的。

<script type="text/javascript" src="jquery-1.1.3.js"></script>
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript">
    //Here, $ refers to the most recent jquery script loaded, which is version 1.4.2.
    $.noConflict();

    //Here, jQuery refers to 1.4.2 and $ refers to 1.1.3
    //You can setup an alias like so:
    var $NEW = jQuery;

    //Now, you can use old jQuery with $ and new jQuery with $NEW.
</script>

有可能 是的,就像運行jQuery和另一個同時使用名稱$框架一樣。 包含一個jQuery副本並使用noConflict將其分配給新名稱,然后對另一個副本執行相同操作。

一個好主意 真的沒有 ,就像同時運行jQuery和另一個框架不是一個好主意一樣,只是更多。 jQuery是一個影響深遠的入侵框架。 如果jQuery的兩個實例開始改變相同的元素(並且1.4之前的jQuery版本對於它們觸摸的元素非常混雜),它們可能會混淆彼此的不可預測,時間敏感和不可判斷的副作用。

如果可能的話,更新所有代碼以在最新的jQuery下運行是迄今為止更好的途徑。 這真的不應該那么困難; jQuery開發人員並沒有破壞很多代碼應該首先依賴的代碼。

你不應該這樣做, $.noConflict()在所有情況下都不會真正幫助你。
這是因為,在內部,jQuery使用別名jQuery所以忘了
任何美元符號$ re-assinging ...如果您將使用任何使用jQuery的代碼,如下所示:
jQuery('div').doSomethingDepricated()然后它將使用頁面中加載的最后一個定義的jQuery。 現在,如果您使用的插件只適用於舊的jQuery,並且內部使用
它只使用jQuery別名(而非$ )編寫,然后它會破壞。

如果你真的想要使用不同版本的2個jQuery腳本,你可以這樣做
在其中一個上搜索並替換“jQuery”名稱,並將其更改為其他名稱,然后如果您願意,還可以通過無沖突方法重新分配任何別名。

作為EndangeredMassa解決方案的擴展,我提出以下修改:

<script type="text/javascript" src="jquery-1.1.3.js"></script>
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript">
    //Here, $ refers to the most recent jquery script loaded, which is version 1.4.2.
    $.noConflict();

    //Here, jQuery refers to 1.4.2 and $ refers to 1.1.3
    //You can setup an alias like so:
    var $NEW = jQuery;

    // jQuery needs to refer to 1.1.3 again and not to 1.4.2
    var jQuery = $;

    //Now, you can use old jQuery with $ and new jQuery with $NEW.
</script>

修復舊代碼以使用最新的jQuery版本。 其他所有東西都是非常hackish,並且會激起所有開發人員的憤怒,他們將來可能需要使用您的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM