我有一个Drupal 7站点(安装了jquery-update,FWIW)。 jQuery似乎是由jQuery对象而不是$引用的。这在https://www.drupal.org/node/171213已有详细记录。
我正在尝试使用提供的脚本来满足某些特定要求。
提供的脚本使用$ object,因此我得到“TyperError:$不是函数”。
提供的HTML和脚本如下所示:
<div id="grid"><span class="grid-load-error">There was an error loading the interactive grid.</span></div>
<script type="text/javascript" src="//site.com/tool.js">
</script>
在页面加载时,我收到TypeError消息。
我试图将脚本的加载包装在一个闭包中:
<div id="grid"><span class="grid-load-error">There was an error loading the interactive grid.</span></div>
<script type="text/javascript">
(function($) {
$(function() {
// console.log($('#grid').html());
$.getScript("//site.com/tool.js");
});
})(jQuery);
</script>
我知道$在闭包内工作 - 注释后的console.log()会在取消注释时生成正确的输出。
我认为$ .getScript()会失败,因为https://api.jquery.com/jquery.getscript/告诉我脚本是在全局上下文中执行的(如果我理解正确的闭包,那么$这里不是全局的)。
有没有办法可以从源代码中包含这个脚本,还是应该编辑它以用“jQuery”替换“$”?
答案 0 :(得分:2)
$.getScript
是$.ajax()
的快捷方式,然后jquery很好,只需将脚本附加到<head>
即可。但是在你的情况下,这不会像你已经发现的那样起作用。因此,只需创建自己的$.getScript
只需获取脚本,然后将其附加到您自己的<script>
标记,并将获取的脚本的内容包装在iffe
<script id="myLib"></script>
<script>
(function ($){
//$.getScript('./tool.js');
$.ajax({
url: './tool.js',
dataType: "text", //force script response to be treated as plain text
success: function(data) {
var myLib = '(function ($){' + data + '}(jQuery));';
$('#myLib').html(myLib);
}
});
}(jQuery));
</script>
你的脚本现在应该可以正常工作了。只需确保
<script id="myLib"></script>
在页面上定义了jQuery之后。
答案 1 :(得分:1)
您需要使用以下内容包装外部脚本:
(function($) {
})(jQuery);