Javascript getElementById查找<;DIV id=";"富",&燃气轮机;那';它在上面,但不在下面

Javascript getElementById查找<;DIV id=";"富",&燃气轮机;那';它在上面,但不在下面,javascript,parsing,Javascript,Parsing,我从来没有上过Javascript编码课程,也没有读过这方面的书。从来没有强烈的需求。但是我注意到了一个最奇怪的问题,它可能解释了我多年来在JS方面遇到的许多困难 这在FF 3.6中起作用: <html><body><div id="foo"></div> <script> var x=document.getElementById("foo").innerHTML="OK"; </script> <html>

我从来没有上过Javascript编码课程,也没有读过这方面的书。从来没有强烈的需求。但是我注意到了一个最奇怪的问题,它可能解释了我多年来在JS方面遇到的许多困难

这在FF 3.6中起作用:

<html><body><div id="foo"></div>
<script> var x=document.getElementById("foo").innerHTML="OK"; </script>
<html><body>
<script> var x=document.getElementById("foo").innerHTML="OK"; </script>
<div id="foo"></div>

var x=document.getElementById(“foo”).innerHTML=“OK”;
但奇怪的是,这在FF 3.6中不起作用:

<html><body><div id="foo"></div>
<script> var x=document.getElementById("foo").innerHTML="OK"; </script>
<html><body>
<script> var x=document.getElementById("foo").innerHTML="OK"; </script>
<div id="foo"></div>

var x=document.getElementById(“foo”).innerHTML=“OK”;
换句话说,Javascript代码(我总是被告知应该在文件中更高的位置,最好是在标题中)无法在文件中看到出现在它下面的HTML元素

虽然我的测试有明确的结果,但我想问:我对这个规则的理解正确吗(我以前从未见过这样的规则),还是这只是一个FF错误


谢谢。

在浏览器实际使用div标记构建DOM树之前,可能会执行JavaScript

为了确保JavaScript能够真正找到元素,请确保使用onReady函数

window.onload = function() {
  document.getElementById("foo").innerHTML="OK";
}
当您的第一个代码被剪断时,div位于JS前面,因此浏览器可能会在实际执行JS之前构建DOM树(虽然不保证,但它可能会一直为您工作)

在第二个片段中,您将div放在script标记后面,因此当DOM树还没有包含div元素时,JS将首先执行

Javascript代码无法在文件中看到出现在其下方的HTML元素

JavaScript在解析过程中执行。除非延迟执行(通过将函数指定为事件处理程序),否则在脚本运行时,您要查找的元素根本不存在。这是预期的行为

我总是被告知应该放在文件的更高位置,最好放在标题中


一般来说。它会阻止解析,因此在下载和运行页面时会延迟页面的呈现。在许多情况下,
元素应该出现在
标记的前面。

这是因为它是按照解析顺序执行的

您需要在加载整个DOM之后执行该操作

要做到这一点

window.onload = function() {
   // do your stuff here
};

或者,将javascript代码放在页面末尾的
标记前面,它会发现元素很好:)