2011-03-20 95 views
38

我试图用getElementById()获取元素,但即使元素存在但它仍返回null。我究竟做错了什么?即使元素存在,getElementById()也会返回null

<html> 
<head> 
    <title>blah</title> 
    <script type="text/javascript"> 
     alert(document.getElementById("abc")); 
    </script> 
</head> 
<body> 
    <div id="abc"> 

    </div> 
</body> 

回答

56

你必须把这个在documentload事件。在脚本执行的时候DOM还没有到达abc

+14

执行把脚本在底部对初学者来说可能更容易。 – 2011-03-20 19:51:42

+0

啊,谢谢!始终认为脚本是在html加载后运行的。 – Softnux 2011-03-20 19:56:01

+0

请注意,您必须等待10分钟才能接受。 – pimvdb 2011-03-20 20:06:08

4

这是因为脚本在页面呈现之前运行。

为了证明这个属性添加到身体标记:

<body onload="alert(document.getElementById('abc'));" > 
0

但它不存在,而不是在HTML这一点。就像程序运行一样,HTML文档从上到下被解析。最好的解决方案就是将脚本标签放在页面底部。您也可以将JavaScript附加到onload事件。

28

您的脚本在DOM加载之前运行。为了解决这个问题,你可以把你的代码在window.onload功能,像这样:

window.onload = function() { 
    alert(document.getElementById("abc")); 
}; 

另一种方法是把你的script权前收盘</body>标签。

+3

“之前/ BODY”可能会混淆初学者。要求是将SCRIPT放在脚本需要引用的HTML元素之后。到/ BODY的距离不相关。 – 2011-03-20 20:02:14

+1

谢谢先生。你从24小时的压力说我。 – Edwinfad 2017-09-17 12:18:50

6

如果你不想连接到负载事件后来干脆把你的脚本在机身的底部,所以它会在最终

<html> 
<head> 
    <title>blah</title>  
</head> 
<body> 
    <div id="abc"> 
    </div> 
    <script type="text/javascript"> 
     alert(document.getElementById("abc")); 
    </script> 
</body> 
</html> 
相关问题