2015-07-10 30 views
0

WordPress以安全模式運送jQuery,這非常棒,但我必須使用的第三方腳本使用$別名,因此只有該腳本有別名$jQuery的方法嗎? (因爲它是第三方不能編輯腳本)特定於腳本的jQuery別名

+1

第三方腳本,不考慮重寫'$'的可能性(當它失敗時)不是一個好腳本... –

+0

@ Karl-AndréGagnon我同意,但最糟糕的部分是:不幸的是它是來自Payza整合API –

回答

5

包裹插件的初始化在 IIFE

(function($){ 
    $('.some').pluginUsingDollarAsJQuery(); 
})(jQuery) 


由於每help pages for plugin authorship

$變量在JavaScript圖書館中非常流行es,如果你使用jQuery另一個庫,你將不得不讓jQuery使用$ with jQuery.noConflict()。但是,這會破壞我們的插件,因爲它是在假設$是jQuery函數的別名的情況下編寫的。爲了與其他插件很好地工作,並且仍然使用jQuery的$別名,我們需要把我們所有的代碼立即調用函數表達式裏面,然後通過功能jQuery和

這基本上名稱的參數歸結爲誰寫了你使用的插件沒有做對。

寫這樣的插件:

$.fn.doSomething = function(){ 
    // whatever 
} 

能做到不與noConflict模式下使用jQuery任何兼容。它應該被包裹在一個IIFE這樣的:

(function($){ 
    $.fn.doSomething = function(){ 
     // whatever 
    } 
})(jQuery) 

如果你的插件是前者的風格,它拋棄了。

+0

是的,它不能像那樣工作。我想很多人誤解了這個問題。 –

+0

@ Karl-AndréGagnon - 我沒有誤解這個問題 - 我認爲有些東西可行,那不是。無論如何,答案更新。 – Jamiec

+0

「如果你的插件是前者的樣式,請將其丟棄。」這是一個非常好的建議,已經投票,但我不能接受答案,因爲它實際上並沒有解決。 –

1

Jamiec's answer是應該在訪問代碼時應該使用的乾淨解決方案,但是如果您無法訪問代碼,則會有骯髒的解決方案。

在加載腳本之前,您可以將$重新指派給jQuery。所以當腳本初始化時,$ === jQuery

要做到這一點時,腳本是內嵌在DOM,只需打開腳本標籤爲之前的重新分配:

<script>$=jQuery;</script> 
<script src="external_script"></script> 

如果動態加載腳本(例如:jQuery.getScript),你可以之前重新分配調用異步函數:

window.$ = jQuery; 
jQuery.getScript('external_source'); 

警告:這種方法可以打破你的腳本,如果window.$在別處使用。如果腳本加載了異步,那麼它也可能不起作用,同時,另一個腳本將$重新分配給其他內容。