忍者ブログ
[124] [123] [122] [121] [120] [119] [118] [117] [116] [115] [114]

DATE : 2017/05/27 (Sat)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


DATE : 2006/08/02 (Wed)

DOM でノードの種類(要素、テキスト、コメントなど)を調べるには、Node インタフェースの nodeType プロパティを調べます。

例えば、次のような XML があったとします。

<?xml version="1.0" encoding="UTF-8"?>
<root>
 <child1>text</child1>
 <child2>text2</child2>
</root>

この XML にある root 要素の子ノードの内容を取り出すコードは、次のようになりそうな気がします。(getElementsByTagName メソッドを使う方法もありますが、以下のコードではルートノードから辿る方法を使います)

// root 変数には、root 要素の Node が格納されている

// root 要素の子ノードを取得
var children = root.nodeList();
var results = [];

// 子ノードの内容を結果を表す配列に追加
for (var i = 0; i < children.length; i++) {
    var aChild = children.item(i);

    results.push(aChild.nodeValue);
}

このコードでは、root 要素の子ノードの内容を結果として格納しています。しかし、この方法は間違いです。上の XML を見ると、root 要素の中に child1 要素と child2 要素があるので、一見間違いなさそうに見えます。しかし、 child1 要素、child2 要素のそれぞれの両端には、改行と半角スペースがあります。この一見何もないように見える部分も、立派な root 要素の子ノードです。child1, child2 要素が Element 型であるのに対し、その外側の空白や改行、child1 や child2 タグに囲まれた文字列は Text 型になります。

そこで、取得できたノードが Element 型かどうかを判別する必要がでてきます。ノードが Element 型かどうかは、JavaScript の場合、以下のようになります。

// node 変数に、取得できたノードが格納されている

node.nodeType == 1

nodeType プロパティを参照すると、そのノードの型が分かります。ノードの型は整数で定義されており、Element 型は「1」になっています(実際には、1は定数としてどこかに定義しておいた方がよさそうです)。型と nodeType プロパティの値との対応は、DOM Level1 に定義されています。

すると、上の間違ったコードは、次のように書きなおせます。

// root 変数には、root 要素の Node が格納されている

// root 要素の子ノードを取得
var children = root.nodeList();
var results = [];
var NODE_TYPE_ELEMENT = 1;

// 子ノードの内容を結果を表す配列に追加
for (var i = 0; i < children.length; i++) {
    var aChild = children.item(i);

    if (aChild.nodeType == NODE_TYPE_ELEMENT) {
        results.push(aChild.nodeValue);
    }
}

参考文献

PR
●この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード
●この記事へのトラックバック
この記事にトラックバックする:
忍者ブログ [PR]
ブログ内検索
最近の状況
リンク
カレンダー
04 2017/05 06
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)
ブログ内検索
最近の状況
リンク
カレンダー
04 2017/05 06
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
使用許諾
最新コメント
(08/15)
(05/04)
(03/06)
(03/04)
(09/25)
最新トラックバック
T/O
(11/05)