javascript document.body undefined如果没有document.write

时间:2013-12-18 18:18:30

标签: javascript

使用这个最小的网页:

<html>
<head>
    <title>test</title>
    <script type='text/javascript' src='test.js'></script>
</head>
<body>
</body>
</html>

这个最小的'test.js'脚本失败了:

document.body.innerText = 'testje';

document.body似乎未定义:

0x800a138f - JavaScript runtime error: Unable to set property 'innerText' 
of undefined or null reference

如果在代码行之前添加了document.write('blabla'),它可以工作:

document.write('blabla');
document.body.innerText = 'testje';

这让我很困惑,虽然看起来很基本。

我是一个Javascript newbe,所以一些解释是最受欢迎的。

3 个答案:

答案 0 :(得分:4)

在脚本运行时没有正文标记,它还没有输出到DOM。

<html>
<head>
    <title>test</title>
</head>
<body>
    <!-- Place content here -->
    <script type='text/javascript' src='test.js'></script>
</body>
</html>

使用document.write时,文档会与新内容同步更新,浏览器会修复您的错误并添加一个body元素,这就是document.write之后可用的原因。

答案 1 :(得分:4)

该脚本显示在head中。在它运行时,尚未遇到body的开头,因此body不存在,无法通过DOM访问。

document.write将HTML写入文档。在这种情况下,正在写入字符数据。由于headhead的结束标记中不允许使用字符数据,body的结束标记是可选的,因此结束head元素并启动{{ 1}}。此时body存在且可以访问。

答案 2 :(得分:1)

在声明并且您的脚本在<head>中运行之前,您无法访问body元素。

试试这个:window.onload = function(){ document.body.innerText = 'testje'; };

或将您的脚本放在<body>

下面