ノードについて
■ Node インターフェースについて
DOM オブジェクトであれば、共通して利用できる基本的な機能として、Node というインターフェースが定められています。
DOM オブジェクトについては、こちらで解説しています。
■ Node インターフェースの派生について
Node インターフェースは、以下の様に派生しています。
ここで解説してない分は、リンク先に解説がありますので合わせてご覧下さい。
Object |
↓派生 |
EventTarget |
↓派生 |
Node |
DOM オブジェクトのプロパティについて
■Node インターフェースのプロパティ一覧
Node インターフェースで利用可能な、プロパティの一覧です。
■ DOM Level 1
プロパティ名 | 型 | 説明 |
nodeType | Number | ノードのタイプを取得する |
nodeName | String | ノード名を取得する |
nodeValue | String | ノードの値を設定する |
parentNode | Node | 親ノードを取得する |
childNodes | NodeList | ノードリストのすべての DOM オブジェクト(子)を取得する |
firstChild | Node | ノードリストの最先頭の DOM オブジェクト(子)を取得する |
lastChild | Node | ノードリストの最後尾の DOM オブジェクト(子)を取得する |
previousSibling | Node | 直前の DOM オブジェクト(隣)を取得する |
nextSibling | Node | 直後の DOM オブジェクト(隣)を取得する |
attributes | NamedNodeMap | 属性をまとめて取得する |
■ DOM Level 2
プロパティ名 | 型 | 説明 |
ownerDocument | Document | ルートとなる Document オブジェクトを取得する |
namespaceURI | String | 名前空間 URI を取得する |
prefix | String | 名前空間接頭辞を取得する |
localName | String | ローカル名を取得する |
■ DOM Level 3
プロパティ名 | 型 | 説明 |
baseURI | String | 相対パスの基点となる URI を取得する。 |
textContent | String | ノードの内容を文字列として設定する |
■ DOM4
プロパティ名 | 型 | 説明 |
parentElement | Element | 親ノードを取得する。親が要素ではない場合 null。 |
■ノードのタイプを調べる
DOM オブジェクトのタイプを調べるには、nodeType プロパティを使用します。
このプロパティは、読み取り専用です。
以下の数値が得られます。
Internet Explorer 8 以前では、定数は定義されていません。
番号 | 定数 | 解説 |
1 | ELEMENT_NODE | エレメントノード、要素に相当 |
2 | ATTRIBUTE_NODE | アトリビュートノード、属性に相当 |
3 | TEXT_NODE | テキストノード、タグ以外の文字データに相当 |
4 | CDATA_SECTION_NODE | CDATA セクションノード |
5 | ENTITY_REFERENCE_NODE | エンティティリファレンスノード |
6 | ENTITY_NODE | エンティティノード |
7 | PROCESSING_INSTRUCTION_NODE | 処理命令ノード |
8 | COMMENT_NODE | コメントノード |
9 | DOCUMENT_NODE | ドキュメントノード、階層のルートに相当 |
10 | DOCUMENT_TYPE_NODE | ドキュメントタイプノード |
11 | DOCUMENT_FRAGMENT_NODE | ドキュメントフラグメントノード |
12 | NOTATION_NODE | ノーテーションノード |
■取得例
document から、すべての子孫 DOM オブジェクトのタイプを調べる
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja-JP">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>タイトル</title>
<script type="text/javascript">
<!--
// 定数が存在しなければ作成
if(!(document.ELEMENT_NODE)){
document.ELEMENT_NODE = 1;
document.ATTRIBUTE_NODE = 2;
document.TEXT_NODE = 3;
document.CDATA_SECTION_NODE = 4;
document.ENTITY_REFERENCE_NODE = 5;
document.ENTITY_NODE = 6;
document.PROCESSING_INSTRUCTION_NODE = 7;
document.COMMENT_NODE = 8;
document.DOCUMENT_NODE = 9;
document.DOCUMENT_TYPE_NODE = 10;
document.DOCUMENT_FRAGMENT_NODE = 11;
document.NOTATION_NODE = 12;
}
//-->
</script>
</head>
<body>
<div>あいう</div>
<div>えおか</div>
<div>
<span>こさし</span>
<span>すせそ</span>
</div>
<script type="text/javascript">
<!--
// ------------------------------------------------------------
// DOM オブジェクトのすべての子孫を検索する関数
// ------------------------------------------------------------
function DomNodeFindAllDescendants(node,func){
function f(n){
var nodes = n.childNodes;
var i;
var num = nodes.length;
var a = new Array();
for(i=0;i < num;i++){ a[i] = nodes[i]; }
for(i=0;i < num;i++){
node = func(a[i]);
if(node){ return node; }
node = f(a[i]);
if(node){ return node; }
}
return null;
}
return f(node);
}
// ------------------------------------------------------------
// DOM オブジェクトから階層のパスを調べる関数
// ------------------------------------------------------------
function DomNodeNodeGetPath(node){
var str = node.nodeName;
while(true){
var parent = node.parentNode;
if(!parent) break;
str = parent.nodeName + "." + str;
node = parent;
}
return str;
}
// ------------------------------------------------------------
// コールバック関数を使って、document のすべての子孫を検索
// ------------------------------------------------------------
DomNodeFindAllDescendants(document,function (node){
var str = "";
// 階層パス
str += "パス:" + DomNodeNodeGetPath(node) + " ";
// ノードの種類
var names = [
"",
"ELEMENT_NODE",
"ATTRIBUTE_NODE",
"TEXT_NODE",
"CDATA_SECTION_NODE",
"ENTITY_REFERENCE_NODE",
"ENTITY_NODE",
"PROCESSING_INSTRUCTION_NODE",
"COMMENT_NODE",
"DOCUMENT_NODE",
"DOCUMENT_TYPE_NODE",
"DOCUMENT_FRAGMENT_NODE",
"NOTATION_NODE"
];
str += "タイプ:" + names[node.nodeType] + "(" + node.nodeType + ")";
// コンソール出力
console.log(str);
// 検索を継続(任意のオブジェクトを返すと終了)
return null;
});
//-->
</script>
</body>
</html>
■ノード名を調べる
DOM オブジェクトの名前を取得するには、nodeName プロパティを使用します。
このプロパティは、読み取り専用です。
ノードの種類によって、得られる文字列が変化します。
ノードの種類 | 得られる文字列 |
ELEMENT_NODE | タグ名 |
ATTRIBUTE_NODE | アトリビュート(属性)の名前 |
ENTITY_REFERENCE_NODE | エンティティリファレンスノードの名前 |
ENTITY_NODE | エンティティ名 |
PROCESSING_INSTRUCTION_NODE | 処理命令の名前 |
DOCUMENT_TYPE_NODE | ドキュメントタイプ名 |
NOTATION_NODE | ノーテーション名 |
■文字列定数が得られる場合
以下のノードは、文字列定数が得られます。
ノードの種類 | 得られる文字列 |
TEXT_NODE | "#text" |
CDATA_SECTION_NODE | "#cdata-section" |
COMMENT_NODE | "#comment" |
DOCUMENT_NODE | "#document" |
DOCUMENT_FRAGMENT_NODE | "#document-fragment" |
■取得例
document から、すべての子孫 DOM オブジェクトのノード名を調べる
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja-JP">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>タイトル</title>
</head>
<body>
<div>あいう</div>
<div>えおか</div>
<div>
<span>こさし</span>
<span>すせそ</span>
</div>
<script type="text/javascript">
<!--
// ------------------------------------------------------------
// DOM オブジェクトのすべての子孫を検索する関数
// ------------------------------------------------------------
function DomNodeFindAllDescendants(node,func){
function f(n){
var nodes = n.childNodes;
var i;
var num = nodes.length;
var a = new Array();
for(i=0;i < num;i++){ a[i] = nodes[i]; }
for(i=0;i < num;i++){
node = func(a[i]);
if(node){ return node; }
node = f(a[i]);
if(node){ return node; }
}
return null;
}
return f(node);
}
// ------------------------------------------------------------
// DOM オブジェクトから階層のパスを調べる関数
// ------------------------------------------------------------
function DomNodeNodeGetPath(node){
var str = node.nodeName;
while(true){
var parent = node.parentNode;
if(!parent) break;
str = parent.nodeName + "." + str;
node = parent;
}
return str;
}
// ------------------------------------------------------------
// コールバック関数を使って、document のすべての子孫を検索
// ------------------------------------------------------------
DomNodeFindAllDescendants(document,function (node){
var str = "";
// 階層パス
str += "パス:" + DomNodeNodeGetPath(node) + " ";
// ノードの種類
var names = [
"",
"ELEMENT_NODE",
"ATTRIBUTE_NODE",
"TEXT_NODE",
"CDATA_SECTION_NODE",
"ENTITY_REFERENCE_NODE",
"ENTITY_NODE",
"PROCESSING_INSTRUCTION_NODE",
"COMMENT_NODE",
"DOCUMENT_NODE",
"DOCUMENT_TYPE_NODE",
"DOCUMENT_FRAGMENT_NODE",
"NOTATION_NODE"
];
str += "タイプ:" + names[node.nodeType] + "(" + node.nodeType + ") ";
// ノード名
str += "ノード名:" + node.nodeName;
// コンソール出力
console.log(str);
// 検索を継続(任意のオブジェクトを返すと終了)
return null;
});
//-->
</script>
</body>
</html>
ノードのメソッドについて
■ノードのメソッド一覧
Node インターフェースで利用可能な、メソッドの一覧です。(一部抜粋)
メソッド名 | 説明 |
insertBefore() | 任意の DOM オブジェクトを、自身の直前(隣)に登録する |
appendChild() | 任意の DOM オブジェクトを、自身のノードリストの最後尾(子)に登録する |
removeChild() | 任意の DOM オブジェクトを、自身のノードリストから除外する |
replaceChild() | 任意の DOM オブジェクトを、置換する |
cloneNode() | 任意の DOM オブジェクトを、複製する |
normalize() | 連続するテキストノードを1つに統合する |
メソッド名 | 説明 |
hasChildNodes() | 子となる DOM オブジェクトを1つ以上保持しているか調べる |
contains() | 任意の DOM オブジェクトが、自身の子孫関係にあるか調べる |
isEqualNode() | 2つの DOM オブジェクトが等しいか調べる |
compareDocumentPosition() | 2つの DOM オブジェクトのノードの位置を比較する |
メソッド名 | 説明 |
lookupPrefix() | 名前空間 URI を指定して、プレフィックスを取得する |
lookupNamespaceURI() | プレフィックスを指定して、名前空間 URI を取得する |
isDefaultNamespace() | 名前空間 URI を指定して、デフォルトの名前空間であるか調べる |