Javascript DOM帮助,父母的父母,孩子的孩子
我正在使用Drupal的Webform模块,它会自动写入所有Id和类,因此我无法将Id添加到我想要添加的位置。而且Drupal没有为我放一个。Grrr 当我只使用一个简单的getElementById('myid')来使用代码时,我没有问题,但是我需要的元素是一个空白的、没有id的、没有类“a”,它位于一个带有id的字段集中的“legend”(有类但没有id) 我尝试了这段代码和几个变体,但没有成功:Javascript DOM帮助,父母的父母,孩子的孩子,javascript,Javascript,我正在使用Drupal的Webform模块,它会自动写入所有Id和类,因此我无法将Id添加到我想要添加的位置。而且Drupal没有为我放一个。Grrr 当我只使用一个简单的getElementById('myid')来使用代码时,我没有问题,但是我需要的元素是一个空白的、没有id的、没有类“a”,它位于一个带有id的字段集中的“legend”(有类但没有id) 我尝试了这段代码和几个变体,但没有成功: document.getElementById('webform-created-id-her
document.getElementById('webform-created-id-here').getElementsByTagName('legend').getElementsByTagName('a');
我觉得我不明白如何正确访问DOM的这一部分。有人能提供帮助或建议吗
谢谢大家! getElementsByTagName返回包含找到的元素的节点列表,因此必须选择元素的索引 第一个元素的示例
var test = document.getElementById('webform-created-id-here').getElementsByTagName('legend')[0].getElementsByTagName('a')[0];
自己在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;
}
您可以编写类似的函数来测试父级:
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]”?因为它可能不是…发布HTML,然后我们可以告诉你它应该是什么。但是,如果指定类型只有一个子项,则它将是[0]。您必须根据元素中的“a”顺序选择索引,并在@Barmar have write中发布该html部分
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;
});