假设我运行的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>
我有一个外部.js文件,应该使用无冲突版本jQuery191
运行,并在脚本底部包含(jQuery)
的jQuery对象。
如果我将.js文件包含在getScript()
中并使用no conflict jQuery对象运行它:
(function (jQuery) {
$.getScript("js.js");
})(window.jQuery191)
脚本是使用jQuery191
还是使用原始jQuery
运行的?或者这个逻辑是愚蠢的。
答案 0 :(得分:2)
getScript
只会加载脚本并将其添加到页面中,它根本不会影响脚本的行为。如果脚本通过它的全局名称访问jQuery,那么它将找不到它(由于noConflict
被调用),并且将无法正确运行。
如果可以,我建议在>强调noConflict
之前添加脚本,否则你必须修改脚本以在你放置的地方查找jQuery({ {1}})。
答案 1 :(得分:0)
在您的包装器((function() { ... })()
)中,您将jQuery
varbele定义为全局范围内jQuery191
变量的副本。
这意味着$.getScript
不使用该变量,但调用jQuery.getScript
有效。
因为它是一个匿名函数,所以包装器中的$
现在引用外部$
变量(在本例中为全局对象中的$
)。
您可以通过将包装器的第一个参数重命名为$
来解决此问题:
(function ($) {
$.getScript('foo.js');
})(window.jQuery191);
或者在你的包装器中添加它:
var $ = jQuery
现在,$
和jQuery
都包含全局范围的jQuery191
变量的副本。