【发布时间】:2014-12-22 04:09:48
【问题描述】:
我有以下sn-ps的代码:
$(document).ready(function() {
document.head.appendChild(
$('<script />').attr('src', 'source.js').on('load', function() {
...
})[0]
);
});
这将触发负载处理程序。
而使用普通的 jQuery append():
$(document).ready(function() {
$('head').append(
$('<script />').attr('src', 'source.js').on('load', function() {
...
})
);
});
这不会触发负载处理程序。
我错过了什么:为什么 jQuery append() 不起作用?
使用document.head.appendChild() 是个坏主意吗?
注意:我不能使用$.getScript()。代码将在本地文件系统上运行,chrome 会抛出跨站脚本错误。
更新
有些人在阅读简洁风格时遇到了困难,所以我使用了额外的换行符来明确哪些对象调用了哪些方法。我还明确表示我的代码在 $(document).ready 块内。
解决方案
最后我选择了:
$(document).ready(function() {
$('head')[0].appendChild(
$('<script />').attr('src', 'source.js').on('load', function() {
…
})[0]
);
});
我认为 @istos 是对的,因为 domManip 中的某些内容正在破坏 load。
【问题讨论】:
-
不知道为什么 jQuery 不起作用。使用本机 API 肯定不是一个坏主意,但如果您支持旧浏览器,有些不支持
document.head属性。您要么需要从 DOM 中选择head元素,要么将其附加到document.body。 -
...另外,我认为旧的 IE 不支持
onload的script元素。不知道 jQuery 是否能解决这个问题。 -
@squint 客户端不包括 IE(谢天谢地)。
-
哇,你真幸运! :) 在这种情况下,我会完全放弃 jQuery。
标签: javascript jquery dom onload