人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

DOM操作についての質問です。
とあるObjectツリーのnodeNameが"#text"のみを拾って、配列で返却するようなJavaScriptはどのように記述すれば良いでしょうか?
内部処理はリカーシブルなものが良いです。
また、もし可能であればhasChildNodes()やnextSiblingによるDOM操作(配列ではなく)だと、コツが理解できそうなのでうれしいです。

●質問者: P-mako
●カテゴリ:インターネット ウェブ制作
✍キーワード:DOM JavaScript object とある 操作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● wasisan
●60ポイント
var tree2array = function(xml_file) {
 // 初期化
 xml_doc = new ActiveXObject("Microsoft.XMLDOM");
 xml_doc.async = false;
 xml_doc.load(xml_file);


 // stackリストに集める再帰処理関数
 var stack = [];
 var iter = function(root) {
 if (!root.hasChildNodes()) {
 return;
 } else {
 var lst = root.childNodes;
 for (var i=0; i<lst.length; i++) {
 if (lst[i].nodeName == "#text") {
 stack.push(lst[i].text);
 }
 iter(lst[i]); // 再帰
 }
 }
 }

 // 本体
 iter(xml_doc.documentElement);
 return stack;
}

var res = tree2array("foo.xml");
WScript.echo(res);

となります.一番簡単なスタックに集めるパターンです.

とても簡単な処理のはずでしたが,少しはまりました.

付録2.1 JavaScript var宣言は大事

にもあるとおりのことです.

グローバルになってしまうので,変数には必ずvarをつけましょう.

変数iにvarをつけなかったのでえらい手間取ってしまいました.

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ