ノードツリーを順に処理する。

昨日http://d.hatena.ne.jp/Mars/20080617の続き。

ちょっとインターフェースを変更名前も変えた。
テキストノードを処理しないオプションもつけた。

// ノードツリーを順に処理する。
// nodeTree(対象element,func,option)
// option - true:テキストノードもfuncで処理する / false:しない
function nodeTree(T,E,option){
	var C = T;
	while(C){
		if(C.firstChild) C=C.firstChild;
		else if(C.nextSibling) C=C.nextSibling;
		else {
			if(C == T) return;
			while(C){
				if(C.parentNode == T) return;
				C = C.parentNode;
				if(C.nextSibling) {
					C=C.nextSibling;
					break;
				}
			}
		}
		if(C && (option || C.nodeType==1)) E(C);
	}
}

使用例 id=sampleの要素を頂点とするノードツリーの内容を表示

nodeTree(document.getElementById('sample'),
	function(O){
		alert(O.nodeName);
	},
	true);