为啥 DOM 元素为空? [复制]

Posted

技术标签:

【中文标题】为啥 DOM 元素为空? [复制]【英文标题】:Why is a DOM element null? [duplicate]为什么 DOM 元素为空? [复制] 【发布时间】:2016-10-17 05:45:03 【问题描述】:

我有这个简单的 html 文件:

<!DOCTYPE html>
<html>
<head>
    <script src='test.js'></script>
</head>

<body>
    <p>I am a paragraph tag</p>
    <h1 >I am an h1 tag</h1>
    <div id="id"> I am a div tag</div>
</body>

还有这个简单的脚本(test.js):

y=document.getElementById("id");
y.style.color="green";

为什么“y”是空的?我得到的错误是

TypeError: y is null

我确定这是我缺少的一个简单的语法,但我终其一生都无法弄清楚!救命!

Post Script:html 文件和 test.js 文件都在同一个文件夹中。

【问题讨论】:

这个问题一天会被问好几次。将来,请尝试在提问之前研究问题:) 你应该使用 var 语法声明你的变量,例如var y = document ..." 最后,您的 javascript 在元素加载到 dom 之前运行。您可以通过将 javascript 包装在 (function() ); 中来修复它 @zeros-and-ones 使其成为局部变量 啊,是的,本地与全球。这是对 JS 变量范围的简短参考:***.com/questions/19721313/… 【参考方案1】:

创建所有元素后,您必须将脚本放在文档的末尾:

<!DOCTYPE html>
<html>
<head>

</head>

<body>
    <p>I am a paragraph tag</p>
    <h1 >I am an h1 tag</h1>
    <div id="id"> I am a div tag</div>
</body>
<script src='test.js'></script>

【讨论】:

嗯...这很奇怪。它有效,但我以前从未这样做过。我想这就是我在事件处理程序中使用的所有其他内容的原因,因此它不会在文档加载后立即运行。 正确,如果你想放在最上面你可以使用window.onload【参考方案2】:

如果您使用的是 jQuery,则可以使用 $(document).ready 将内容包装在脚本上,如果使用纯 JavaScript,则可以使用 window.onload。

【讨论】:

我不认为 OP 正在使用jquery @Hector Barbossa 这是 *** 的最大+最大问题,像你这样的人会决定“放弃它并尝试 jQuery!”如果问题是not tagged jQuery,那么don't answer with jQuery. 对不起,我的错......我之前没有检查标签,但我也给出了一个简单的javascript解决方案

以上是关于为啥 DOM 元素为空? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥字符串可以为空? [复制]

为啥没有结果时 ResultSet 不为空? [复制]

为啥 Heroku 说主键为空? [复制]

C++ - 为啥在删除后将对象设置为空? [复制]

为啥 all() 为空的可迭代对象返回 True? [复制]

为啥我的 iOS 应用程序中的变量或强制转换为空? [复制]