簡単に説明してみます。
次の HTML スニペットを想定してみましょう。
<div>
Hey!
<span>How is it going?</span>
</div>
さて、問題はchildren
プロパティがElement
クラスから来るということです。Element
他のオブジェクトのリストを返します:
List<Element> children
そのため、要素は要素である子を持つことができます。
しかし、クラスnodes
に由来するプロパティがあります。他のオブジェクトNode
のリストを返します:Node
List<Node> nodes
したがって、ノードは、ノード自体でもある子ノードを持つことができます。
あなたが尋ねるべき質問は、ノードと要素の違いは何ですか?
前の HTML スニペットにコメントを追加させてください。
<div> <!-- Element -->
Hey! <!-- Node -->
<span> <!-- Element -->
How is it going? <!-- Node -->
</span>
</div>
Element
extendsを覚えておいてください。これは、とが要素であるだけでなく、ノードでもNode
あることを意味します! すべてが HTML のノードです。実際、コメントもノードです。<div>
<span>
<!-- foo -->
プロパティにアクセスするnodes
と、ノードのリストが取得されます。これは基本的に、HTML コメントやテキストを含む、その下にあるすべてのリストです。
nodes
上記の<div>
タグの を取得すると、1 つ ("hey!") と 1 つ ( ) が返さNode
れElement
ます<span>
。ただし、children
プロパティを取得すると、単一のElement
( <span>
) を含むリストのみが返されます。
したがって、nodes
要素、テキスト ノード、コメント、ドキュメント タイプなど、文字通りすべてが含まれます。
あなたの質問に今すぐ答えるには:
document.body.append(elem);
document.body.children.add(elem);
これら 2 つは同じです。1 つ目は便宜上の単なるラッパーです。
またはに追加すると、実際には大きな違いはありません。ただし、プロパティを取得すると、結果が異なる場合があります。期待以上の結果が得られるため、通常は使用することをお勧めします。nodes
children
children
実装に関しては、Kyrra が述べたようにほとんど違いはありませんが、あまり気にする必要はありません。