使用这个最小的网页:
<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,所以一些解释是最受欢迎的。
答案 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写入文档。在这种情况下,正在写入字符数据。由于head
和head
的结束标记中不允许使用字符数据,body
的结束标记是可选的,因此结束head
元素并启动{{ 1}}。此时body
存在且可以访问。
答案 2 :(得分:1)
在声明并且您的脚本在<head>
中运行之前,您无法访问body元素。
试试这个:window.onload = function(){ document.body.innerText = 'testje'; };
或将您的脚本放在<body>