質問: ノードには、いくつか種類があってタグ内に記述された文字列を格納しているテキストノード、そのタグを格納している要素ノード、タグの属性を格納している属性ノードがあります。 ノードと要素は、親子関係でノードが親(スーパータイプ)で、ノードのnodeTypeという属性が`ELEMENT_NODE(1)`になるものが要素になります。そしてこのノード或いは要素の階層構造の根本(ルート)ノードががDocumentであり、 `javascript`内では、documentという大域変数で接続できるものです。因みにこの大域変数は、グローバルオブジェクトであるwindowの変数です。このグローバルドキュメントは、ノードには登場しない。 合っているか分かりませんが、ここまでは認識できたのです。しかし、未だに要素とノードの違いが分からず、ピンと来ません。`javascript`におけるノードと要素の違いはなんですか。
回答: 「要素」というのはSGML/HTML/XMLで出てくる概念でDOMとは直接かかわりがありません。 質問文にあう文脈で正しいのは要素ではなく、要素ノードですね。 ### 要素とタグ 要素は「開始タグ」「内容」「終了タグ」で構成される抽象的な概念で HTML 4.01 の頃から存在します。 これは HTML (SGML) の概念なので一通りは理解してください。 ``` sample test. ``` * 開始タグ ... `` * 内容 ... `sample test.` * 終了タグ ... `` * 要素 ... `sample test.` * 3.2.1 要素 - HTML 4.01 (ja) ### Node と Element `Node` は `Element` の `[[Prototype]]` の位置にいます。 ``` Object.getPrototypeOf(Element) === Node; // true ``` しかし、「`Node` === ノード」「`Element` === 要素ノード」ではありません。 ノードは `Node` のインスタンスであり、要素ノードは `Element` のインスタンスです。 ``` var p = document.createElement('p'); // p要素ノード p instanceof Node; // true p instanceof Element; // true ``` prototype-chain や `new` 演算子の扱いについて再学習すると良いと思います。 * 継承とプロトタイプチェーン - JavaScript | MDN * new - JavaScript | MDN Re: aaaaaaaa さん