Wordpress在安全模式下发布jQuery,这非常棒,但是我必须使用的第三方脚本使用$
别名,因此$
的方法是jQuery
到{{ 1}}仅适用于该脚本? (不能编辑脚本,因为它的第三方)
答案 0 :(得分:5)
将插件的初始化包装在IIFE
(function($){
$('.some').pluginUsingDollarAsJQuery();
})(jQuery)
击> <击> 撞击>
根据help pages for plugin authorship:
$ variable在JavaScript库中非常流行,如果你在jQuery中使用另一个库,你将不得不让jQuery不使用$ with jQuery.noConflict()。但是,这会破坏我们的插件,因为它是在假设$是jQuery函数的别名的情况下编写的。为了与其他插件一起使用,并且仍然使用jQuery $别名,我们需要将所有代码放在Immediately Invoked Function Expression中,然后传递函数jQuery,并命名参数
这基本上归结为这样一个事实:无论是谁编写了你正在使用的插件,都没有做到这一点。
编写一个这样的插件:
$.fn.doSomething = function(){
// whatever
}
会使它与noConflict模式下使用jQuery的任何人都不兼容。它应该包含在IIFE中,如下所示:
(function($){
$.fn.doSomething = function(){
// whatever
}
})(jQuery)
如果您的插件是前一种风格,请抛弃它。
答案 1 :(得分:1)
Jamiec's answer是一个干净的解决方案,如果您有权访问该代码,则应该使用该解决方案,但如果您无法访问该代码,则会出现一个肮脏的解决方案。
您可以在加载脚本之前将$
重新分配给jQuery。因此,当脚本初始化时,$ === jQuery
。
要在脚本在DOM中内联时执行此操作,只需在重新分配之前打开脚本标记:
<script>$=jQuery;</script>
<script src="external_script"></script>
如果您动态加载脚本(例如:jQuery.getScript
),则可以在调用异步函数之前重新分配:
window.$ = jQuery;
jQuery.getScript('external_source');
警告:如果在其他位置使用window.$
,此方法可能会破坏您的脚本。如果脚本是异步加载的话,如果另一个脚本将$
重新分配给其他脚本,则它也可能无效。