結構よくある処理だとおもう。 function searchParent(e,f){ return e && (f(e)?e:searchParent(e.parentNode,f)) ; } function searchChild(e,f){ return e && (f(e)?e:(searchChild(e.firstChild,f) || searchChild(e.nextSibling,f))); } searchChild エレメントeの子ツリー内を順番に*1探し、最初に関数f(ノード)がtrueになるものを返す。無ければnull searchParent 親を順番に捜し、関数f(ノード)がtrueになるものを返す。無ければnull tagNameEqual = function(e,tagName){ return e.tagName==tagName; } elemen