Node | NN 6 IE 5 DOM 1 |
Node オブジェクトは、ドキュメント内のコンテンツの基本的な構成単位を表す W3C DOM の抽象表現です。W3C DOM モデル内でアクセスできる、次のようなコンテンツ要素はすべてノードです。タグで挟まれた名前のない連続するテキスト文字列、タグ付き要素、「名前/値」属性のペア、コメントや DOCTYPE 宣言などの特別な要素、ドキュメントそのものなど。 |
|
Node オブジェクトには多数のプロパティやメソッドがありますが、その大半はノードとその周囲のノードとの関係に関連しています。スクリプトによって読み取りまたは制御が行われるドキュメント内のオブジェクトは、基本的な Node オブジェクトの子孫として定義されます。つまり、HTML 要素、テキストノード、要素の属性など、DHTML スクリプトで処理される最も一般的なコンテンツを持つオブジェクトでは、初めから、これら一連のプロパティとメソッドが共有されることを意味しています。その後、HTML 要素として求められる機能に応じて、プロパティやメソッドを追加して特定の用途を実現します。 |
|
W3C DOM のノード階層では、さまざまなドキュメントコンテンツの継承関係が体系化されていますが、このモデルが表す概念的枠組みや細分性は、第 1 世代の DOM や Microsoft の DOM が有していた簡潔な HTML 構成に比べると、ときとして冗漫に映ります。ただし、このモデルの最終的な目標は、XML と HTML (純粋な HTML と XML 化されたバージョンの双方を含む) の両方のドキュメントに適用できる単一のモデルを提供することにあります。 |
ATTRIBUTE_NODE、CDATA_SECTION_NODE、COMMENT_NODE、DOCUMENT_FRAGMENT_NODE、DOCUMENT_NODE、DOCUMENT_TYPE_NODE、ELEMENT_NODE、ENTITY_NODE、ENTITY_REFERENCE_NODE、NOTATION_NODE、PROCESSING_INSTRUCTION_NODE、TEXT_NODE | NN 6 IE なし DOM 1 | |||||||||||||||||||||||||
読み取り専用 | ||||||||||||||||||||||||||
これらの定数は W3C DOM のルート Node オブジェクトに属するため、ドキュメントレベルのすべてのノードおよび要素に継承されます。各プロパティは、各 DOM ノードの nodeType プロパティに関連付けられた整数に対応します。これらのプロパティを標準テキストのように使用して、比較などの操作でスクリプトが検索するノードタイプを表すことができます。 |
||||||||||||||||||||||||||
例 | ||||||||||||||||||||||||||
if (myObject.nodeType == document.ELEMENT_NODE) { // process as an element here } |
||||||||||||||||||||||||||
値 | ||||||||||||||||||||||||||
次の DOM ノードタイプに対応する整数 |
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
既定値 | ||||||||||||||||||||||||||
上記の定数値 |
attributes[] | NN 6 IE 5 DOM 1 |
読み取り専用 | |
名前付きノードマップオブジェクトを返します。これは、属性オブジェクト (W3C DOM タイプ Attr) の配列 (コレクション) に似ていますが、配列のメンバーにアクセスするための独自のメソッドが追加されています。IE の attributes 配列には、要素の内部 DTD に含まれるすべての属性に対するエントリが含まれます。さらに IE 6 では、HTML ソースコードで明示的に設定されたカスタム (expando) 属性が含まれます。要素の属性や値をスクリプトで変更しても、この配列には反映されません。 |
|
Netscape 6 では、attributes 配列には、HTML ソースコードで要素に対して明示的に定義した属性のエントリのみが含まれます。これには、カスタム属性も含まれます。属性や値をスクリプトで変更 (追加または削除) すると、attributes 配列が参照する attribute オブジェクトに反映されます。 |
|
名前付きノードマップオブジェクトのメソッドの代わりに、標準の JavaScript 配列構文を使用して個々の属性オブジェクトにアクセスすることもできます。ただし、一般的にスクリプトでは、要素オブジェクトのプロパティ、または要素の getAttribute() メソッドと setAttribute() メソッドを使用して、HTML 要素属性値にアクセスする方がはるかに便利です。XML ドキュメントの解析に便利な W3C DOM の詳細については、Attr オブジェクトと NamedNodeMap オブジェクトのプロパティおよびメソッドを参照してください。 |
|
例 | |
var ldAttr = document.getElementById("myImg").attributes.getNamedItem("longdesc"); |
|
値 | |
属性オブジェクト参照の配列 (コレクション)。Netscape 6 ではソースコード順、Macintosh 版 IE では名前のアルファベット順、Windows 版 IE では順序に規則はありません。 |
|
既定値 | |
現在の要素のモデル |
childNodes[] | NN 6 IE 5 DOM 1 |
読み取り専用 | |
これは、ノード階層の 1 つ下のレベルにあるすべての子ノード (ノードリスト) への参照の配列で構成される W3C DOM Node オブジェクトのプロパティです。ドキュメントノードツリーの一部でも、ドキュメントツリーにまだ挿入されていない独立したドキュメントフラグメントでもかまいません。さらにネストされたノードを参照するには、現在のノードの子ノードごとに、childNodes 配列にアクセスする必要があります。ノードツリーを調べるには不可欠のプロパティです。このタイプの配列のプロパティとメソッドについては、NodeList オブジェクトを参照してください。 |
|
例 | |
for (var i = 0; i < nodeRef.childNodes.length; i++) { if (nodeRef.childNodes[i].nodeType == document.ELEMENT_NODE) { // operate on an element } } |
|
値 | |
ノードオブジェクトへの参照の配列 |
|
既定値 | |
長さ 0 の配列 |
firstChild、lastChild | NN 6 IE 5 DOM 1 |
読み取り専用 | |
それぞれ、現在の要素ノードの最初または最後の子ノードへの参照を返します。通常、これらの子ノードは、要素内にネストされているテキストノードとなります。1 つのテキストノードだけを含むような単純な要素では、どちらのプロパティも同じテキストノードへの参照を返します。tr 要素のように複雑な構造では、他の要素ノード (td 要素など) を子ノードとして持つことができますが、ブラウザによっては、ソースコードの要素間の改行がテキストノードに変換されることがあります。このため、これらのプロパティから返されたノードタイプを検証してから、ノード処理を実行することをお勧めします。 |
|
例 | |
if (document.getElementById("elementID").firstChild.nodeType == 3) {
// process as a text node
}
|
|
値 | |
Node オブジェクトへの参照。テキストノード、HTML 要素ノードなどを含みます。 |
|
既定値 | |
null |
localName、namespaceURI、prefix | NN 6 IE なし DOM 2 |
読み取り専用 | |
これら 3 つのプロパティは、主に XML 名前空間を利用して定義されたタグ付きの XML ドキュメント要素に適用されます。このようなドキュメントの簡単な例を次に示します。 |
|
これらのプロパティは、要素の命名規則の詳細を示します。localName は要素の nodeName プロパティと同じものです。つまり、ドキュメント全体のスコープ内でのタグ名となります。これは、そのタグ名が別の名前空間を元にする要素に再利用される場合も含まれます。一方、prefix は、通常 XML ドキュメント内のコンテナの xmlns 属性を使用して定義される接頭辞名に要素をリンクします。これによって、スクリプトは要素が関連付けられている名前空間を識別できるようになります。さらに、namespaceURI プロパティは、コンテナ要素の xmlns 属性に割り当てられた URI の文字列を返すので、より詳しいバインドを示します。これら 3 つのプロパティはすべて Node オブジェクトに属していますが、これらの値は、要素ノードおよび属性ノードではなくノードタイプに対して null になります。むしろ、null にする必要があります。ただし、Netscape 6 では空の文字列になります。 |
|
例 | |
var allTitles = document.getElementsByTagName("title"); for (var i = 0; i < allTitles.length; i++) { if (allTitles[i].prefix == "libBook" && allTitles[i].namespaceURI.indexOf("catalog.umv.edu") != -1) { // process title elements from the desired namespace here } } |
|
値 | |
文字列 |
|
既定値 | |
localName では要素のタグ名。その他では、空の文字列です。 |
nextSibling、previousSibling | NN 6 IE 5 DOM 1 |
読み取り専用 | |
ドキュメントツリー内で、現在のノードと同じネストレベルにある次のノードまたは前のノードへの参照を返します。プロパティ名で示された位置にノードが存在しない場合は、null を返します。要素ノード内にある単独のテキストノードは、どちらのプロパティも null を返します。ノード順序は最初はソースコード順序ですが、スクリプトがドキュメントツリーを変更した場合、これらのプロパティは変更された順序でノードを返します。 |
|
例 | |
var nextNode = document.getElementById("elementID").nextSibling;
|
|
値 | |
Node オブジェクトへの参照。テキストノード、HTML 要素ノードなどを含みます。 |
|
既定値 | |
null |
nodeName | NN 6 IE 5 DOM 1 |
読み取り専用 | |
ノードタイプに影響を受けるノードの名前を識別する文字列を返します。ノードタイプが要素と属性の場合は、それぞれタグ名と属性名を返します。その他、固有のラベルが関連付けられていない多くのノードについては、nodeName プロパティは、ノードタイプを示す固定の文字列を返します。たとえば、テキストノードに対しては #text、ルートドキュメントノードに対しては #document となります。要素については、要素オブジェクトの tagName プロパティと同じ文字列を返します。IE 6 および Netscape 7 は、ソースコードスタイルや DOCTYPE の指定に関わらず、要素タグの文字列をすべて大文字で返します。 |
|
例 | |
if (document.getElementById("elementID").nextSibling.nodeName == "#text") {
// process as a text node
}
|
|
値 | |
#cdata-section、#document、#document-fragment、#text の各ノードについては固定文字列、属性や要素などのノードタイプについては可変文字列です。 |
|
既定値 | |
ノードによって異なります。 |
nodeType | NN 6 IE 5 DOM 1 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
読み取り専用 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
W3C DOM で規定されているノードタイプに対応する整数を返します。ノードオブジェクトのタイプに対するノードオブジェクトのテストには、nodeName プロパティ値ではなく、このプロパティを使用することをお勧めします。各ノードタイプには値が設定されていますが、nodeType プロパティをサポートするすべてのブラウザが、すべてのノードタイプをオブジェクトとしてサポートしているわけではありません。整数には対応する定数が関連付けられているので、その定数を使用すると冗長にはなりますが、ノードタイプ処理の際にスクリプトの比較がわかりやすくなります。本章冒頭の ATTRIBUTE_NODE プロパティを参照してください。nodeType プロパティを使用して、ルート Element ノードと HTMLElement ノードなど、要素タイプを区別する方法はありません。また、Windows 版 IE 6 では、DOCTYPE 要素をコメントノードタイプとして返すバグがあります。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
例 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (document.getElementById("elementID").firstChild.nodeType == 1) {
// process as an element
}
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
値 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
次の表に示すいずれかの整数 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
既定値 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ノードによって異なります。 |
ownerDocument | NN 6 IE 5(Mac)/6(Win) DOM 1 |
読み取り専用 | |
現在のノードが格納されている document オブジェクトへの参照を返します。イベントプロパティから取得されたオブジェクト参照や ID 文字列として渡されたオブジェクト参照を処理する関数に役立ちます。対応する IE プロパティは、document です。 |
|
例 | |
var currDoc = document.getElementById("elementID").ownerDocument;
|
|
値 | |
document オブジェクトへの参照 |
|
既定値 | |
現在の document オブジェクト |
parentNode | NN 6 IE 5 DOM 1 |
読み取り専用 | |
ドキュメントツリーで現在のノードのコンテナとして機能するすぐ外側のノード (通常は要素) への参照を返します。現在のノードと親との関係は単純に構造的なもので、配置コンテキストとは関係ありません。親ノードとは、現在のノードを完全に中に囲い込んでしまうノードです。単に現在のノードの隣に位置する兄弟ノードと混乱しないようにしてください。同様のカスケード手法を IE の parentElement プロパティにも使用できます。ただし、最新バージョンの IE は、要素中心の IE 独自のプロパティと、ノード中心の W3C DOM のプロパティのどちらの考え方もサポートしていますが、それらの結果が完全に同じになると考えるのは危険です。 |
|
例 | |
if (document.getElementById("elementID").parentNode.nodeType == 1) { document.getElementById("elementID").parentNode.style.fontSize = "14pt"; } |
|
値 | |
要素オブジェクトへの参照 |
|
既定値 | |
ノードによって異なります。 |
prefix | |
localName を参照してください。 |
previousSibling | |
nextSibling を参照してください。 |
addEventListener() | NN 6 IE なし DOM 2 |
addEventListener("eventType"、listenerFunction、useCapture) | |
イベントハンドラー関数を現在のノードにバインドして、イベントターゲットとして、またはイベント伝達として、特定のタイプのイベントがノードに到着したときに、関数が実行されるようにします。W3C DOM イベントは、テキストノードと要素ノードを伝達します。ノードは、3 番目のブール値パラメータの設定に基づいて、イベントキャプチャまたはイベントバブリングの伝達中に、イベントタイプを待機します。このメソッドは、異なるパラメータ値を使用して同じノードに対して複数回呼び出すことができます。ただし、同じイベントと伝達タイプについては、1 つのリスナー関数のみを呼び出すことができます。イベントリスナーを一時的に追加する場合は、removeEventListener() メソッドによってイベントリスナーを削除できます。 |
|
パラメータ | |
|
|
戻り値 | |
なし |
appendChild() | NN 6 IE 5 DOM 1 |
appendChild(nodeObject) | |
現在のノードオブジェクトで、最後の子ノードの末尾に新しいノードを挿入します。現在のノードオブジェクトには、子ノードを含めることができる必要があります。子ノードを含められない場合、例外が発生します。このメソッドは、要素、テキストノード、またはドキュメントフラグメントを既存の要素に動的に追加する最も一般的な方法です。たとえば、スクリプトがドキュメントに新しいコンテンツの固まりを組み込むときに実行します。ただし、appendChild() メソッドと共にパラメータとして渡された参照がドキュメントツリーの既存ノードを指している場合、そのノードは最初にツリーから削除され、次に現在のオブジェクト内にある子ノードのリストの末尾に追加されます。この方法で、ノードを 1 つの場所からコンテナ末尾に簡単に移動できます。 |
|
テキストノードを兄弟として既存のテキストノードに追加しても、2 つのテキストノードは結合されません。すべての兄弟ノードを 1 つの大きなテキストノードに結合するには、親の normalize() メソッドを呼び出してください。 |
|
パラメータ | |
|
|
戻り値 | |
追加されたノードへの参照 |
hasAttribute() | NN 6 IE なし DOM 1 |
hasAttribute("attributeName") | |
メソッドのパラメータに一致する名前を持つ属性が現在の要素にある場合、ブール値 true を返します。 |
|
パラメータ | |
|
|
戻り値 | |
true または false のブール値 |
hasChildNodes() | NN 6 IE 5 DOM 1 |
現在のノードに子ノードが含まれる場合、ブール値 true を返します。 |
|
パラメータ | |
なし |
|
戻り値 | |
true または false のブール値 |
insertBefore() | NN 6 IE 5 DOM 1 |
insertBefore(newChildNode, referenceChildNodeOrNull) | |
現在のノードに含まれるいずれかの子ノードの前に、現在のノードの子としてノードを挿入します。通常、現在のノードは要素です。新しい子は、ドキュメントツリーに存在するノードへの参照とすることができます。この場合、このメソッドが呼び出されると、ノードは元の位置から削除されます。子ノードは、ドキュメントフラグメント (HTML タグを含むこともできる) や Attr (Netscape 6 および IE 6 で実装済み) など、有効な DOM ノードタイプとして新しく作成されることもあります。 |
|
2 番目のパラメータによって、既存の子ノードの間に基準点を指定できます。この基準点の前に、新しい子ノードが挿入されます。または、2 番目のパラメータに null を指定すると (IE では省略すると)、新しいノードは現在のノードの最後の子として挿入されます。これは、appendChild() メソッドと同じ結果になります。 |
|
パラメータ | |
|
|
戻り値 | |
挿入されるノードオブジェクトへの参照 |
isSupported() | NN 6 IE なし DOM 2 |
isSupported("feature", "version") | |
現在のノードが W3C DOM で規定されたモジュールおよびバージョンをサポートしている場合 (つまり、仕様に準拠している場合)、ブール値 true を返します。document.implementation オブジェクトの hasFeature() メソッドは同じテストを実行しますが、ブラウザアプリケーション全体についてテストを実行します。isSupported() メソッドは個々のノードに対してテストを実行するので、現在のノードタイプでサポートされている機能を確認できます。isSupported() のパラメータ値は、document.implementation.hasFeature() のパラメータ値と同じです。 |
|
ブラウザに実装されている DOM が各モジュールに適合しているかどうかを確認した上で、true の値を返す処理をどのように行うかは、ブラウザのメーカーに委ねられています。これは、実装にバグがないことや、他の実装と整合性があることを意味するわけではありません。スクリプト作成者側で注意が必要です。 |
|
理論上は、このメソッドを使用すると、プロパティへのアクセスまたはメソッドの呼び出し前に、モジュールのサポートを確認できます。次のフラグメントでは、myElem が要素ノードへの参照であることを想定しています。 if (myElem.isSupported("CSS", "2.0")) { myElem.style.color = "green"; } |
|
実際には、W3C DOM サポートの報告機能はまだ広く実装されておらず、下位互換性はまったくないので、オブジェクトの検出を行うほうが賢明です。 |
|
パラメータ | |
|
|
戻り値 | |
true または false のブール値 |
normalize() | NN 6 IE なし DOM 2 |
現在の (要素) ノードのすべての兄弟テキストノードを単一のテキストノードに縮小します。ノードを走査するスクリプトを実行するときに、単一のテキストノードに連続したテキストが格納されていることを前提とする場合は、要素の子ノードの挿入後または削除後に、このメソッドを呼び出すことが必要な場合があります。W3C DOM では、テキストノードが兄弟として別のテキストノードを持たない場合のみ、ドキュメントツリーが正規であると想定しています。 |
|
パラメータ | |
なし |
|
戻り値 | |
なし |
removeChild() | NN 6 IE 5 DOM 1 |
removeChild(childNodeReference) | |
現在の要素から子ノードを削除します。パラメータには、現在の要素にネストされている既存の子ノードへの参照を指定する必要があります。削除された子ノードは、ドキュメントツリーの一部ではなくなりますが、メモリには保持されています。このメソッドは削除されたノードへの参照を返すので、この参照を変更してからドキュメントツリーの別の位置に配置することもできます。あるノードのいずれか 1 つの子を削除するように指定できますが、ノード自身を削除するようには指定できません。その場合は、IE の removeNode() を参照してください。 |
|
パラメータ | |
|
|
戻り値 | |
削除されたノードへの参照 |
swapNode() | NN なし IE 5(Win) DOM なし |
swapNode(otherNodeObject) | |
ドキュメントツリー内の現在のノードを、パラメータで渡された別のノードと置き換えます。別のノードオブジェクトは、新たに作成することも、ドキュメントツリーの別の場所に存在するノードへの参照とすることもできます。参照とする場合は、2 つのノードの位置を変更するだけの、双方向の置換と同じ結果になります。2 つのノードのノードタイプや要素の表示タイプが異なる場合 (インライン要素とブロックレベル要素など)、ドキュメントの表示が大幅に異なる場合があります。 |
|
パラメータ | |
|
|
戻り値 | |
メソッドを呼び出したノード、つまり現在のノードへの参照 |