1

トラバースのためにいくつかの簡単なJSテストを実行していますが、なぜdocumentElementが1つのnullオブジェクトで構成されているのか疑問に思いました。

<html>
    <head>
        <title>My document</title>
    </head>
    <body>
        <h1>Some header</h1>
        <p id="pID">Some paragraph</p>
        <p name="pNAME">Another paragraph/p>
    </body>
</html>
<script type="text/javascript">
    var rootElement = document.documentElement;
    var childNodes = rootElement.childNodes;

    for (var i = 0; i < childNodes.length; i++) {
      document.write(childNodes[i].localName);
      document.write("<br>");
    }
</script>

を返しますhead, null, body。しかし、なぜ3childNodesが含まれているのrootElementですか?

4

2 に答える 2

2

オブジェクトではなくオブジェクトのみをリストすると、次のlocalNameように表示されます。

[object HTMLHeadElement]
[object Text]
[object HTMLBodyElement]

したがって、テキストノードのnullを受け取ります。localNameこれを修正するには、次childrenの代わりに必要childNodesです。

<script type="text/javascript">
    var rootElement = document.documentElement;
    var childNodes = rootElement.children;

    for (var i = 0; i < childNodes.length; i++) {
      document.write(childNodes[i]);
      document.write("<br>");
    }
</script>

これがJSFiddleのデモです。

于 2013-01-21T13:05:23.753 に答える
1

との間の改行はテキスト( )と見なされるため、その</head>属性<body>はです。[object Text].localNamenull

これを試してみると、2つの要素のみが出力されます

    <html>
    <head>
        <title>My document</title>
    </head><body>
        <h1>Some header</h1>
        <p id="pID">Some paragraph</p>
        <p name="pNAME">Another paragraph</p>
    </body>
</html>

    <script type="text/javascript">
        var rootElement = document.documentElement;
        var childNodes = rootElement.childNodes;

        for (var i = 0; i < childNodes.length; i++) {
          document.write(childNodes[i].localName);
          document.write("<br>");
        }
    </script>
于 2013-01-21T12:58:20.283 に答える