【发布时间】:2015-07-01 21:08:41
【问题描述】:
如果我包含一个带有外部源的脚本,然后尝试使用 jQuery 进行解析 - 它会下载该脚本,但不会将其加载到 DOM 中。我正在使用 .append(),但这似乎适用于任何其他 jQuery DOM 插入方法。
这是 Stack Snippets 中的一个示例
$(function(){
var selet2Html =
'<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/css/select2.css" rel="stylesheet"/>' +
'<script src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.js" ><\/script>' +
'<select class="select2">' +
' <option value="AK">Alaska</option>' +
' <option value="HI">Hawaii</option>' +
'</select>' +
'<script >' +
' $(function() {' +
' $(".select2").select2();' +
' });' +
'<\/script>';
$("body").append(selet2Html);
});
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script>
即使这会在网络选项卡中下载脚本:
它仍然会返回以下错误(表明外部库-select2-从未加载):
我不想使用$.getScript(),因为我实际上是使用.load() 动态加载这个字符串,所以我不确定它是否会包含任何外部脚本。
如何让它加载外部库?
【问题讨论】:
-
使用前需要给它时间加载,动态标签不像硬编码标签那样同步
-
是的,这是一个简单的竞争条件。您需要等待
$.fn.select2出现。 -
据我所知,
.getScript()和.load()都不会告诉您加载的脚本何时执行。他们的回调在文件加载并且不需要执行时触发。我建议您将代码拆分为不同的部分,您将附加.when()每个部分是.done()。 -
你考虑过使用 $.holdready 吗? api.jquery.com/jQuery.holdReady
标签: javascript jquery dom src script-element