即使元素存在,getElementById() 也返回 null

IT技术 javascript html null getelementbyid
2021-01-12 03:22:12

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

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

    </div>
</body>

5个回答

你必须把它放在一个document load事件中。abc脚本执行时,DOM 还没有达到

啊,谢谢!一直以为脚本是在加载html之后运行的。
2021-03-13 03:22:12
请注意,您必须等待 10 分钟才能接受。
2021-03-28 03:22:12
我是 javascript 入门者,我认为这个答案需要该文档加载的示例,呵呵
2021-03-31 03:22:12
此外,添加另一个原因是有帮助的,即验证组件 id 的路径是否正确,不仅是表单 id,还有表单的父级(如果有一个)(例如手风琴),以及然后是组件,始终验证这一点。
2021-04-02 03:22:12
对于初学者来说,将脚本放在底部可能更容易。
2021-04-07 03:22:12

您的脚本在 DOM 加载之前运行。要解决此问题,您可以将代码放在window.onload函数中,如下所示:

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

另一种方法是将您的script权利放在结束</body>标记之前

另一件事要注意。如果你有一个 window.onload 跟在文档上从上到下的另一个窗口 onload 之后,第二个窗口 onload 将覆盖第一个 window.onload 的内容。例如,如果您尝试使用 JS 句柄在第一个 window.onload 内设置<div> 的背景颜色,如下所示:document.getElementById('div01').style.background = 'blue';并且在第二个 window.onload 内具有相同的句柄但设置为“黑色”,则您的 div 的背景颜色将是黑色而不是蓝色。DOM 中的顺序很重要。
2021-03-23 03:22:12
“就在 /BODY 之前”可能会让初学者感到困惑。要求是将 SCRIPT 放在脚本需要引用的 HTML 元素之后。与 /BODY 的距离无关。
2021-03-29 03:22:12
很好的答案!简单,包括工作示例!
2021-04-08 03:22:12

如果您不想附加到加载事件,那么只需将您的脚本放在正文的底部,这样它就会在最后执行-

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

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

为了证明,将此属性添加到 body 标记中:

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

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