遞歸通過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
。
有趣 - 這看起來完全像我所需要的,但它仍然不起作用。有沒有辦法找出它是否真的是「[0]」?因爲它可能不是... – user1149499 2013-03-08 21:49:28
發佈HTML,那麼我們可以告訴你它應該是什麼。但是,如果只有一個指定類型的孩子,它將是[0]。 – Barmar 2013-03-08 21:57:47
您必須根據元素中的'a'順序選擇索引,並且@Barmar已經寫入,發佈html部分 – Sam 2013-03-08 21:59:20