繁体   English   中英

当document.body存在时执行js

[英]Execute js when document.body exists

我在文档HEAD部分中有这样的脚本。

<html>
<head>
    <title>Javascript Tests</title>    
    <script type="text/javascript">
        var mySpan = document.createElement("span");
        mySpan.innerHTML = "This is my span!";

        mySpan.style.color = "red";
        document.body.appendChild(mySpan);
    </script>
</head>
<body>
</body>
</html> 

在此脚本中,我想将元素添加到主体,但由于document.body为null异常而失败。 我知道该身体目前不存在。 但是我仍然需要执行此操作,因为无法将此脚本插入正文,受API限制,我无法访问所有站点代码。

重要的一点:在窗口加载之前,我需要执行此操作(我的意思是window.load事件)。

我可以这样做吗?

如果您不想使用Jquery ,则可以使用DOMContentLoaded 请参见此处的参考。

当文档完全加载并解析后,无需等待样式表,图像和子帧完成加载,就会触发DOMContentLoaded事件

document.addEventListener("DOMContentLoaded", function(event) {
    var mySpan = document.createElement("span");
    mySpan.innerHTML = "This is my span!";
    mySpan.style.color = "red";
    document.body.appendChild(mySpan);
});

浏览器支持:

Chrome     Firefox (Gecko)         IE   Opera   Safari

0.2         1.0 (1.7 or earlier)   9.0  9.0     3.1

我通常避免使用框架,除非绝对必要,但在这种情况下,我认为您可以使用jquery:

$(function () {
    // do stuff after DOM has loaded
});

因此,将您的代码包装如下:

<script type="text/javascript">
$(function () {
    var mySpan = document.createElement("span");
    mySpan.innerHTML = "This is my span!";

    mySpan.style.color = "red";
    document.body.appendChild(mySpan);
});
</script>

记住,您将需要引用jQuery

这与window.onload onload在加载所有其他资源(图像等)之后执行

我在示例中显示的代码将在DOM完成加载后执行

看起来最快的检测document.body何时可用的方法是使用MutationObserver ,如https://stackoverflow.com/a/26324641/454780所示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM