天天看點

jQuery.noConflict() 解決沖突 原理深入

<code>jquery.noconflict()</code>函數用于讓出jquery庫對變量$(和變量jquery)的控制權。

一般情況下,在jquery庫中,變量<code>$</code>是變量<code>jquery</code>的别名,它們之間是等價的,例如<code>jquery("p")</code>和<code>$("p")</code>是等價的。由于變量<code>$</code>隻有一個字元,并且特點鮮明,是以我們更加習慣使用<code>$</code>來操作jquery庫。

不過,其他js庫也可能使用變量<code>$</code>來進行操作,例如prototype庫。這個時候兩個庫可能會由于變量<code>$</code>的控制權問題而發生沖突。

此時,你可以使用該函數讓出jquery庫對變量<code>$</code>的控制權,将該變量交給上一個實作它的js庫,之後我們隻能使用變量<code>jquery</code>來操作jquery庫。

此外,使用該函數,還可以同時讓出變量<code>$</code>和變量<code>jquery</code>的控制權,進而實作多個不同版本的jquery庫共存(詳情見下面的示例說明)。

該函數屬于全局<code>jquery</code>對象。

參數

描述

removeall

可選/boolean類型是否徹底移交對變量jquery的控制權,預設為<code>false</code>。

如果省略了參數<code>removeall</code>或該參數不為<code>true</code>,則表示隻讓出對變量<code>$</code>的控制權;如果該參數為<code>true</code>,則表示同時讓出變量<code>$</code>和<code>jquery</code>的控制權。

以下是加載prototype和jquery庫的情況:

此外,我們還可以使用其他自定義的變量名來操作jquery:

即使是多個庫共存,我們也可以在<code>jquery.ready()</code>的回調函數或其他自定義函數中将局部變量<code>$</code>作為jquery的别名使用:

如果要實作兩個版本的jquery庫共存,我們可以編寫如下代碼:

三個版本的jquery庫共存,對應的jquery示例代碼如下:

注意:多個可能存在全局變量重名沖突的js庫,變量的實際控制權一般取決于js庫的加載順序。以上面三個版本的jquery庫的示例代碼為例,後加載的jquery庫的變量覆寫了之前版本的變量,是以每次讓出變量的控制權,控制權就會交給上一個js庫。

繼續閱讀