2015-07-10 53 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.$在别处使用。如果脚本加载了异步,那么它也可能不起作用,同时,另一个脚本将$重新分配给其他内容。