javascript - 如何在 JavaScript 中获取直接子元素(不使用 jQuery)?
问题描述
在以下代码中,我试图获取.node
作为元素的直接子元素的所有.row
元素。.node
目前,我的代码将查找与元素中的类匹配的任何给定.row
元素。
我怎样才能在纯 JavaScript 中获得直接节点(例如,在 CSS 中,这看起来像这样.row > .node
:)?
let rows = document.getElementsByClassName("row");
var nodes = [];
for (let i = 0; i < rows.length; i++) {
console.log(rows[i].getElementsByClassName("node"));
}
.node {
border-radius: 50%;
border: 1px solid #000;
}
.node,
.empty {
display: inline-block;
height: 50px;
width: 50px;
line-height: 50px;
text-align: center;
}
.d-none {
display: none;
}
<div class="row">
<div class="node">
Foo
</div>
<div class="node d-none">
Foo
</div>
<div class="row">
<div class="empty">
</div>
<div class="node d-none">
Foo
</div>
</div>
</div>
问题是最终.node
元素(像这样嵌套:).row > .row > .node
将被多次调用,因为我没有将它作为直接子元素来处理。
我看到了这个答案,它解释了document.querySelector
. 我是否应该将其用于我想要达到的目的?或者我可以通过使用来达到同样的效果document.getElementsByClassName
吗?
解决方案
只需使用querySelectorAll
和使用查询字符串.row > .node
:
const nodes = document.querySelectorAll(".row > .node");
nodes.forEach(node => console.log(node.textContent));
.node {
border-radius: 50%;
border: 1px solid #000;
}
.node,
.empty {
display: inline-block;
height: 50px;
width: 50px;
line-height: 50px;
text-align: center;
}
.d-none {
display: none;
}
<div class="row">
<div class="node">
Foo
</div>
<div class="node d-none">
Foo
</div>
<div class="row">
<div class="empty">
</div>
<div class="node d-none">
Foo
</div>
</div>
</div>
在几乎所有情况下,用于在 jQuery 中选择元素的选择器字符串也可以用于选择元素querySelectorAll
(以及使用 CSS 选择元素)。(有一些罕见的例外,比如:contains
,它们只在 jQuery 中有意义。)
请注意,您需要使用
.row > .node
不是
.row < .node
选择.node
作为 a 子级的 s .row
。
推荐阅读
- java - 关系表删除级联在 4 种情况下,但 Entity-config 只允许 2
- json.net - 在 Json.NET 中使用 $id 的属性值
- vb.net - 使用 vb.net 通过 printdocument 打印时如何自动换行
- php - 如何从另一个类中的一个类中获取变量?
- azure-devops - AzureDevOps Build Pipeline 任务 50 分钟发布工件
- c# - Razor MVC 中不需要的 RenderSection
- junit - junit运行时出现Lombok错误
- r - 从重复日期创建观察虚拟变量
- angular - 我在为 android 创建 prod APK 时遇到问题
- python - 为什么boto3 ec2图像太慢