getscript能否在jquery noconflict中运行导入的脚本?
假设我运行的jQuery版本没有如下冲突:getscript能否在jquery noconflict中运行导入的脚本?,jquery,jquery-plugins,getscript,Jquery,Jquery Plugins,Getscript,假设我运行的jQuery版本没有如下冲突: <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script><script type="text/javascript">var jQuery191 = $.noConflict(true);</script> 脚本是使用jQuery191运行还是使用原始jQuery运行?或者这个逻辑是愚蠢
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script><script type="text/javascript">var jQuery191 = $.noConflict(true);</script>
脚本是使用jQuery191
运行还是使用原始jQuery
运行?或者这个逻辑是愚蠢的。在包装器((function(){…})(
)中,您将jQuery
变量定义为全局范围内jQuery191
变量的副本
这意味着$.getScript
不使用该变量,但调用jQuery.getScript
是可行的。
由于它是一个匿名函数,包装器中的$
现在引用外部$
变量(在本例中,是全局对象中的$
)。
您可以通过将包装的第一个参数重命名为$
来解决此问题:
(function ($) {
$.getScript('foo.js');
})(window.jQuery191);
或者在包装器中添加以下内容:
var $ = jQuery
现在,
$
和jQuery
都包含全局范围的jQuery191
变量的副本。getScript
只需加载脚本并将其添加到页面中,它根本不会影响脚本的行为。如果脚本通过其全局名称访问jQuery,那么它将找不到它(由于调用了noConflict
),并且无法正确运行
如果可以,我建议在调用
noConflict
之前包含脚本,否则您必须修改脚本以在放置jQuery的地方查找jQuery(jQuery191
)。在您的情况下,它与原始jQuery一起运行,由于您从未将jQuery191版本设置为$
,这是正确的,但这对于foo.js
,并不重要-它仍然不受包含在页面中的上下文的影响。但是,$.getScript将获得将脚本附加到,导致它在全局范围内运行,$
和jQuery
不是jQuery 1.9.1
var $ = jQuery