自分で DOM を再帰します。要素の子への参照は、childNodes
すべてのノードに存在する属性に格納されます。
function recurseDOM (el,test) {
if (test(el)) {
return el;
}
else {
var children = el.childNodes;
var result;
for (var i=0; i<children.length; i+) {
result = recurseDOM(children[i],test);
if (result) {
return result;
}
}
}
return null;
}
これは、私がこの回答を入力するのにかかった 2 分で書いた唯一の可能な実装です。したがって、おそらくいくつかの改善を使用できます。しかし、あなたはその考えを理解します。
次のように使用します。
recurseDOM(document.body,function(el){
if (el == something_something) { return 1}
return 0
});
同様の関数を記述して、親をテストできます。
function testParents (el, test) {
var parent = el.parentNode;
if (test(parent)) {
return 1;
}
else {
if (parent != document.body) {
return testParents(parent,test);
}
}
return 0;
}
したがって、次のように書くことができます。
recurseDOM(document.body,function(el){
if (el.tagName == 'a' && testParents(el,function(p){
if (p.tagName == 'legend' && testParents(p,function(pp){
if (pp.id == 'webform-created-id-here') {
return 1;
}
return 0;
})) {
return 1;
}
return 0;
})) {
return 1;
}
return 0;
});
getElementById
または、 の代わりに から再帰を開始することもできますdocument.body
。