JavaScript HTML DOMナビゲーション
HTML DOMを使用すると、ノードの関係を使用してノードツリー内を移動できます。
DOMノード
W3C HTML DOM標準によると、HTMLドキュメント内のすべてがノードです。
- ドキュメント全体がドキュメントノードです
- すべてのHTML要素は要素ノードです
- HTML要素内のテキストはテキストノードです
- すべてのHTML属性は属性ノードです(非推奨)
- すべてのコメントはコメントノードです
HTML DOMを使用すると、ノードツリー内のすべてのノードにJavaScriptからアクセスできます。
新しいノードを作成したり、すべてのノードを変更または削除したりできます。
ノードの関係
ノードツリー内のノードは相互に階層関係を持ちます。
親、子、および兄弟という用語は、関係を説明するために使用されます。
- ノードツリーでは、最上位のノードをルート(またはルートノード)と呼びます。
- すべてのノードには、ルート(親を持たない)を除き、親が 1つだけあります。
- ノードは多数の子を持つことができます。
- 兄弟(兄弟または姉妹)は、同じ親を持つノードです。
上記のHTMLから次のことがわかります。
<html>
は、ルートノードです<html>
は、親がいない<html>
は、<head>
と<body>
の親です<head>
は、<html>
の最初の子です<body>
は、<html>
の最後の子です
そして:
<head>
は、1人の子供がいます:<title>
<title>
は、1つの子(テキストノード)があります:「DOMチュートリアル」<body>
は、2人の子供がいます:<h1>
と<p>
<h1>
は、子が1つあります:「DOMレッスン1」<p>
は、「Hello world!」という子が1つあります<h1>
と<p>
は、兄弟です
ノード間の移動
次のノードプロパティを使用して、JavaScriptでノード間を移動できます。
parentNode
childNodes[nodenumber]
firstChild
lastChild
nextSibling
previousSibling
子ノードとノード値
DOM処理でよくあるエラーは、要素ノードにテキストが含まれていると想定することです。
例:
要素ノード<title>
(上記の例)にはテキストが含まれません。
これには、値「DOM Tutorial」を持つテキストノードが含まれています。
テキストノードの値には、ノードのinnerHTML
プロパティによってアクセスできます。
innerHTMLプロパティへのアクセスは、最初の子のnodeValue
へのアクセスと同じです。
最初の子へのアクセスは次のように行うこともできます。
以下の(3)の例はすべて、
<h1>
要素のテキストを取得し、<p>`要素にコピーします。
例
例
例
内部HTML
このチュートリアルでは、innerHTMLプロパティを使用してHTML要素のコンテンツを取得します。
ただし、上記の他の方法を学習すると、DOMのツリー構造とナビゲーションを理解するのに役立ちます。
DOMルートノード
完全なドキュメントへのアクセスを許可する2つの特別なプロパティがあります。
document.body
- 文書の本文document.documentElement
- 完全な文書
例
例
nodeNameプロパティ
nodeName
プロパティはノードの名前を指定します。
- nodeNameは読み取り専用です
- 要素ノードのnodeNameはタグ名と同じです
- 属性ノードのnodeNameは属性名です
- テキストノードのnodeNameは常に#textです
- ドキュメントノードのnodeNameは常に#documentです
例
注: nodeName
には常にHTML要素の大文字のタグ名が含まれます。
nodeValueプロパティ
nodeValue
プロパティはノードの値を指定します。
- 要素ノードのnodeValueは
null
- テキストノードのnodeValueは、テキストそのものです
- 属性ノードのnodeValueは属性値です
nodeTypeプロパティ
nodeType
プロパティは読み取り専用です。ノードのタイプを返します。
例
最も重要なnodeTypeプロパティは次のとおりです。
Node | Type | Example |
---|---|---|
ELEMENT_NODE | 1 | <h1 class="heading">W3Schools</h1> |
ATTRIBUTE_NODE | 2 | class = "heading" (非推奨) |
TEXT_NODE | 3 | W3Schools |
COMMENT_NODE | 8 | <!-- これはコメントです --> |
DOCUMENT_NODE | 9 | HTMLドキュメント自体 (<html>の親) |
DOCUMENT_TYPE_NODE | 10 | <!Doctype html> |
Type2はHTML DOMでは推奨されていません(ただし機能します)。XML DOMでは非推奨ではありません。
プログラミング学習を加速させる
プログラミングをプロの講師に教えてもらいませんか。