Javascript DOM执行顺序
据我所知,html/javascript的执行顺序是串行的(与所有编程语言一样),这意味着浏览器逐行读取html/javascript代码并对其进行解释 这就是为什么一些javascript程序员将标记放在主体的末尾,以确保整个DOM都已加载,并且现在可以访问他们想要的任何元素。 他们就是这样做的-Javascript DOM执行顺序,javascript,html,dom,Javascript,Html,Dom,据我所知,html/javascript的执行顺序是串行的(与所有编程语言一样),这意味着浏览器逐行读取html/javascript代码并对其进行解释 这就是为什么一些javascript程序员将标记放在主体的末尾,以确保整个DOM都已加载,并且现在可以访问他们想要的任何元素。 他们就是这样做的- <html> ... <body> ... <script> //whatever code you want to put </script> &l
<html>
...
<body>
...
<script> //whatever code you want to put
</script>
</body>
...
...
//不管你想写什么代码
我想测试一下,所以我写了以下代码
<html>
<head>
</head>
<body>
<script>
var elm=document.getElementById("myp");
alert(elm.innerHTML);
</script>
<p id="myp"> well this is darned interesting </p>
</body>
</html>
var elm=document.getElementById(“myp”);
警报(elm.innerHTML);
这真是太有趣了
如您所见,我将脚本放在定义p元素之前,脚本正在尝试访问它。我想我会得到一个错误,因为p还没有被定义,但我得到了“这真是太有趣了”(p的值)。
当我将脚本放入head元素时,也会发生同样的情况。(使用chrome和firefox进行测试)
有人能解释一下发生了什么事吗 抛开这个特定示例的细节不谈,我将总结一下一般原则。我的源代码是Flanagan,JavaScript:The Ultimate Guide,5/e 将浏览器视为读取一行HTML并呈现某些响应是过于简单的。当然,它会按顺序扫描输入,但DOM对象构造的顺序并不是逐行扫描输入。最好把它当作一个黑盒子 如果您想运行一个将操作DOM元素的脚本,安全可靠的方法是将其作为
onload
事件的处理程序运行。有时,您可以编写内联脚本来执行此操作,但这是一个灰色区域。弗拉纳根写道:
大多数浏览器似乎允许脚本操作任何文档
出现在
标记之前的元素。一些JavaScript
程序员经常这样做。然而,没有任何标准要求它
工作,而且在一些人中有一种持续的,尽管模糊的信念
有经验的JavaScript编码人员,负责放置文档操作代码
在
中,标记可能会导致问题。。。。(第256页)
但是,您可能需要在解析完所有HTML之后但在加载所有图像之前操作DOM。如果这是您的需要,那么像jQuery及其事件这样的工具就是最好的选择。我在firebug控制台/Fx13上遇到了一个错误,正如我所预料的:好的,但结果仍然是“这真是太有趣了”。我只是想知道现代浏览器在这个问题上发生了什么…结果如何?警报根本不会显示,并且文本已经是标记的一部分。我在Firefox13.0上看到了警报,我在chrome上也看到了。我没有。这是一把类似的小提琴。我只收到第二次警报。