getscript可以在jquery noconflict中运行导入的脚本吗?

时间:2013-03-08 22:31:45

标签: 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>

我有一个外部.js文件,应该使用无冲突版本jQuery191运行,并在脚本底部包含(jQuery)的jQuery对象。

如果我将.js文件包含在getScript()中并使用no conflict jQuery对象运行它:

(function (jQuery) {
    $.getScript("js.js");
})(window.jQuery191)

脚本是使用jQuery191还是使用原始jQuery运行的?或者这个逻辑是愚蠢的。

2 个答案:

答案 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变量的副本。