自己通过 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
.