仅使用纯JavaScript,没有jQuery或其他框架,找到特定父元素的子元素(带类或ID)的最有效方法是什么?
在这种情况下,我需要找到parent的child1或child2,假设DOM树中可能有多个带child1或child2类的元素。我只想要parent的元素。
<div class="parent">
<div class="child1">
<div class="child2">
</div>
</div>
</div>
仅使用纯JavaScript,没有jQuery或其他框架,找到特定父元素的子元素(带类或ID)的最有效方法是什么?
在这种情况下,我需要找到parent的child1或child2,假设DOM树中可能有多个带child1或child2类的元素。我只想要parent的元素。
<div class="parent">
<div class="child1">
<div class="child2">
</div>
</div>
</div>
var parent = document.querySelector('.parent');
,你可以这样做来限定搜索范围到parent
的子元素:parent.querySelector('.child')
parent.querySelectorAll('.child')
来返回一个 NodeList。 - schmijoschildren
属性返回一个类似以下的元素数组:parent = document.querySelector('.parent');
children = parent.children; // [<div class="child1">]
如果您愿意,可以使用 document.getElementsByClassName('parent')[0]
等替代 querySelector
。
编辑:现在我想了想,您也可以使用 querySelectorAll
来获取具有类名 child1
的 parent
的后代元素:
children = document.querySelectorAll('.parent .child1');
qS和qSA之间的区别在于后者返回与选择器匹配的所有元素,而前者仅返回第一个这样的元素。
children
不返回array
,而是返回一个HTMLCollection
。 就像 Array.isArray(document.children) == false
一样。 您需要使用Array.from(document.children)
将其转换为正确的数组。 - Jorjon你可以使用子选择器来获取直接子元素,这是另一个可行的想法。
document.querySelectorAll(".parent > .child1");
应该返回所有具有类名“child1”的直接子元素。.child2
和其他子元素。 - EsgerElement.querySelector()是最好的方法;
const parent = document.querySelector('.parent');
// Do anything next //When you want
parent.querySelector('.child1'); // <div class="child1">
如果您有一个父元素,想要获取特定属性的所有子元素,则需要执行以下步骤:
1. 获取父元素
2. 使用parent.nodeName.toLowerCase()
获取父节点名称并将其转换为小写,例如 DIV 将变为 div
3. 如需进一步特定目的,请获取父元素的属性,例如 parent.getAttribute("id")
。这将给出父元素的id
4. 然后使用 document.QuerySelectorAll(paret.nodeName.toLowerCase()+"#"_parent.getAttribute("id")+" input " );
如果您要获取父节点的输入子元素
let parent = document.querySelector("div.classnameofthediv")
let parent_node = parent.nodeName.toLowerCase()
let parent_clas_arr = parent.getAttribute("class").split(" ");
let parent_clas_str = '';
parent_clas_arr.forEach(e=>{
parent_clas_str +=e+'.';
})
let parent_class_name = parent_clas_str.substr(0, parent_clas_str.length-1) //remove the last dot
let allchild = document.querySelectorAll(parent_node+"."+parent_class_name+" input")
let parent = document.querySelector('.parent');
let child1 = parent.querySelectorAll('.child');
let childrens = parent.children;
let secondChild = parent.children[1]
document.getElementById('element-id')
。 - Felix Kling