--- title: Node slug: Web/API/Node tags: - API - DOM - Document - Element - Interface - Node - Reference - Structure - hierarchy translation_of: Web/API/Node browser-compat: api.Node ---
{{APIRef("DOM")}}
{{Glossary("DOM")}} の Node
インターフェイスは、他の多くの DOM API オブジェクトのベースとなる抽象的な基底クラスです。したがって、これらのオブジェクト型と類似しており、しばしば交換して使用することができます。抽象クラスであるため、単なる Node
オブジェクトというものは存在しません。 Node
の機能を実装しているオブジェクトはすべて、そのサブクラスの一つをベースにしています。最も注目すべきものは、 {{domxref("Document")}}, {{domxref("Element")}}, {{domxref("DocumentFragment")}} です。
それに加えて、あらゆる種類の DOM ノードが Node
を基底とするインターフェイスで表現されます。これには、 {{DOMxRef("Attr")}}, {{DOMxRef("CharacterData")}}
({{DOMxRef("Text")}}, {{DOMxRef("Comment")}}, {{DOMxRef("CDATASection")}}, {{DOMxRef("ProcessingInstruction")}} がすべて既定とするもの), {{DOMxRef("DocumentType")}}, {{DOMxRef("Notation")}}, {{DOMxRef("Entity")}}, {{DOMxRef("EntityReference")}} があります。
場合によっては、ベースとなる Node
インターフェイスの特定の機能が子インターフェイスに適用されないことがあります。この場合、継承するノードは状況に応じて null
を返したり、例外を投げたりします。例えば、子を持てないノード型に子を追加しようとすると、例外が発生します。
{{InheritanceDiagram}}
以下のプロパティに加え、 Node
は親である {{DOMxRef("EventTarget")}} からプロパティを継承しています。
Node
を持つ文書のベース URL を表す {{DOMxRef("DOMString")}} を返します。Node
の子が変化すれば自動的に {{DOMxRef("NodeList")}} オブジェクトが更新されることを意味します。null
を返します。null
を返します。null
を返します。Node
の名前を持つ {{DOMxRef("DOMString")}} を返します。名前の構造は、ノードの型によって異なります。例えば、{{DOMxRef("HTMLElement")}} は {{DOMxRef("HTMLAudioElement")}} に対して 'audio'
というように対応するタグの名前、{{DOMxRef("Text")}} ノードは '#text'
という文字列、{{DOMxRef("Document")}} ノードは '#document'
という文字列になります。unsigned short
を返します。使用できる値は次の通りです。
名称 | 値 |
---|---|
ELEMENT_NODE |
1 |
ATTRIBUTE_NODE {{Deprecated_Inline}} |
2 |
TEXT_NODE |
3 |
CDATA_SECTION_NODE |
4 |
ENTITY_REFERENCE_NODE {{Deprecated_Inline}} |
5 |
ENTITY_NODE {{Deprecated_Inline}} |
6 |
PROCESSING_INSTRUCTION_NODE |
7 |
COMMENT_NODE |
8 |
DOCUMENT_NODE |
9 |
DOCUMENT_TYPE_NODE |
10 |
DOCUMENT_FRAGMENT_NODE |
11 |
NOTATION_NODE {{Deprecated_Inline}} |
12 |
null
を返します。null
を返します。null
を返します。null
を返します。以下のプロパティに加えて、親である {{DOMxRef("EventTarget")}} からメソッドを継承しています。
true
または false
の値で返します。true
、そうでない場合は false
である {{jsxref("Boolean")}} を返します。null
を返します。複数の接頭辞があった場合の結果は実装依存です。null
を返します)。接頭辞として null
を与えると、デフォルトの名前空間を返します。true
または false
で返します。true
または false
で返します。function removeAllChildren(element) { while (element.firstChild) { element.removeChild(element.firstChild) } }
/* Note: or use document.body.textContent = "" */ removeAllChildren(document.body)
次の関数は、ルートノードに含まれる (ルートノード自身も含めた) すべてのノードに対してコールバック関数を再帰的に呼び出します。
function eachNode(rootNode, callback) { if (!callback) { const nodes = [] eachNode(rootNode, function(node) { nodes.push(node) }) return nodes } if (false === callback(rootNode)) { return false } if (rootNode.hasChildNodes()) { const nodes = rootNode.childNodes for (let i = 0, l = nodes.length; i < l; ++i) { if (false === eachNode(nodes[i], callback)) { return } } } }
eachNode(rootNode, callback)
rootNode
の (ルート自身を含む) 各子孫ノードに対して、関数を再帰的に呼び出します。
callback
が省略された場合、この関数は代わりに {{jsxref("Array")}} を返し、そこには rootNode
とその中に含まれるすべてのノードが含まれます。
callback
が提供され、 false
を返した場合、現在の再帰レベルは中止され、関数は最後の親のレベルから実行を再開します。これは、 (特定の文字列を含むテキストノードを検索するなどして) ノードが見つかった時点でループを中止するために利用できます。
rootNode
Node
オブジェクトです。callback
{{optional_inline}}Node
を引数として受け取るものです。省略された場合、 eachNode
は {{jsxref("Array")}} で、 rootNode
の中に含まれる (ルート自身も含む) ノードの一覧を返します。以下の例は、"box"
という名前の <div>
要素の中にあるそれぞれの <span>
要素の textContent
プロパティを出力します。
<div id="box"> <span>Foo</span> <span>Bar</span> <span>Baz</span> </div>
const box = document.getElementById("box") eachNode(box, function(node) { if (null != node.textContent) { console.log(node.textContent) } })
上記の例は、ユーザーのコンソールに以下の文字列を結果として出力します。
"\n\t", "Foo", "\n\t", "Bar", "\n\t", "Baz"
注: ホワイトスペースは {{DOMxRef("Text")}} ノードの一部を形成し、インデントと改行は独立した Text
を Element
ノードの間に形成します。
次の例は eachNode()
関数の現実世界での使用方法として、ウェブページ上のテキストの検索を示します。
検索には grep
というラッパー関数を使用しています。
function grep(parentNode, pattern) { const matches = [] let endScan = false eachNode(parentNode, function(node){ if (endScan) { return false } // Ignore anything which isn't a text node if (node.nodeType !== Node.TEXT_NODE) { return } if (typeof pattern === "string") { if (-1 !== node.textContent.indexOf(pattern)) { matches.push(node) } } else if (pattern.test(node.textContent)) { if (!pattern.global) { endScan = true matches = node } else { matches.push(node) } } }) return matches }
For example, to find {{DOMxRef("Text")}} nodes that contain typos:
const typos = ["teh", "adn", "btu", "adress", "youre", "msitakes"] const pattern = new RegExp("\\b(" + typos.join("|") + ")\\b", "gi") const mistakes = grep(document.body, pattern) console.log(mistakes)
{{Compat}}