无法理解为什么html标签没有head和body作为子节点?

时间:2017-09-01 21:52:10

标签: javascript dom

我遇到了遍历DOM树的问题。这是我的代码:

HTML:

<!DOCTYPE html>
<html lang="en">

<head>
   <meta charset="utf-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <script src="main.js"></script>
   <title>DOM Traversing</title>
</head>

<body>
    <ol>
        <li>
            <a href="">One</a>
            <ul>
              <li><a href="">1.1</a></li>
              <li><a href="">1.2</a></li>
              <li><a href="">1.3</a></li>
            </ul>
       </li>
       <li><a href="">Two</a></li>
       <li><a href="">Three</a></li>
       <li><a href="">Four</a></li>
    </ol>
</body>

</html>

使用Javascript:

var rootNodeChildren = document.childNodes;
var rootNodeChild;

for (var i = 0; i < rootNodeChildren.length; ++i) {
    rootNodeChild = rootNodeChildren[i];
    console.log(rootNodeChild);
    console.log(rootNodeChild.childNodes.length);
    for (var j = 0; j < rootNodeChild.childNodes.length; ++j) {
        console.log(rootNodeChild.childNodes[j]);
    }
}

这是以下代码的结果:

enter image description here

文档对象有2个孩子

  1. DOCTYPE html
  2. html标签
  3. html标签也应该有2个孩子。

    1. 头标记
    2. body tag
    3. 但输出显示html标签只有一个子标题,即头标记

      有人可以解释一下原因吗?

      在示例中,HTML不相关,但我打算编写一个递归函数来遍历DOM树的所有元素。

1 个答案:

答案 0 :(得分:4)

这是由于脚本执行时间。

脚本在DOM上存在body元素之前运行:因此它正确地告诉你head元素是当时唯一的子元素。

将您的脚本移到底部,它会在您的计数中包含body元素。