2012-09-03 88 views
1

我正在將jQuery腳本動態加載到隨機頁面中。 有時他們支持jQuery,有時他們有其他庫,有時他們根本沒有任何庫..jQuery - 檢查是否觸發了.noconflict

我需要支持所有情況,因此,首先我檢查jQuery是否已加載。 不是,我使用.noconflict動態地將jQuery加載到頁面中(以避免在其他庫存在衝突的情況下出現衝突,daahhh),然後繼續使用我的腳本。

它已經被加載的情況下,我需要知道該頁面是否觸發了.noconflict函數或不。 爲什麼?這很簡單。 假設一個隨機頁面同時具有Prototype和jQuery(發生,是)。 網站管理員會觸發jQuery的.noconflict模式,以避免與它發生衝突。 之後,我觸發我的腳本,並檢查jq是否已加載(是)。 然後,我必須知道天氣使用$()或jQuery()方法,因爲如果我繼續使用$(),我可能會訪問原型處理程序, 而我不想那樣。

+2

一直使用'jQuery()',解決了問題。 – Musa

+1

檢查'$ === jQuery' – timidboy

回答

3

.noConflict只刪除$對象而不是jQuery對象。 (除非你添加true作爲第一個參數。

所以,你可以隨時使用jQuery()

+0

是的,我總是可以使用jQuery(),但是因爲我正在將jQuery加載到頁面中,所以我必須先知道使用.noconflict的天氣。 –

+0

@Gal爲什麼你不能總是使用.noconflict? –

+0

我相信我終究可以。情況是,我正在注入jQuery到一個已經運行的頁面中,我不知道jQuery是否被加載,或者任何其他庫。它可能有2個庫,其中noConflict已經觸發(或不),我只想繼續使用與原始頁面相同的輸入法。即將再次考慮,可能是無用的。 –

1

正如其他人說,你應該始終默認爲使用完整的jQuery對象,而不是別名。如果它是一個quantity-的打字問題,推住前使用$,然後在文本編輯器中找到替換

...但是,如果你絕對,肯定必須這樣做的荒謬的方式,這很簡單:

​if​ ($ == jQuery) { alert("YAY"); }​​​​​​ 

下面是我使用jQuery 1.8和一個單獨加載的MooTools 1.4.5在JSFiddle上製作的一個示例:運行一次,然後卸載外部MooTools並重試。

不要說我們沒有警告過你。

+0

是的,我必須使用這種荒謬的方式:) –

+0

我的精神因爲害怕你幫助傳播到我們不幸的世界的邪惡而顫抖。但是,如果我幫助你在整個intertron中帶入陰影,請考慮接受我的答案。 –

+0

耐心我的年輕編碼,耐心是你必須用它來接收你所尋求的那些學分。 –

1

你可以使用:

jQuery(function($){ 
//Insert your javascript code here 

}); 

和所有的jQuery代碼將在這些括號,絕不會與其他原型衝突。

+0

假設有一個運行原型的頁面,然後我將jQuery注入它。如果我不運行任何jQuery函數,它是否會與已經存在的原型發生衝突? –

+0

不,它不會,當你在這些大括號之外時,你處於該原型的範圍內,並且在這些大括號內,你在jQuery範圍內。 –

+0

這將使內部函數在dom上運行就緒。 它相當於: jQuery.ready(function($){ }); 這可能不是他想要的。 – Benja