javascript - Javascript获取具有特定类的所有祖先
问题描述
这是用于搜索特定 div 的所有祖先的代码。我怎样才能以找到所有祖先的方式修改该代码,但只能使用特定的类(例如'myclass')?
let nodes = [];
let element = document.getElementById('find');
nodes.push(element);
while(element.parentElement) {
nodes.unshift(element.parentElement);
element = element.parentElement;
}
<div id="n1" class="something">
<div id="n2" class="myclass">
<div id="n3" class="something">
<div id="n4" class="myclass">
<button id="find"></button>
</div>
</div>
<div id="n5" class="something">
<div id="n6" class="myclass">
</div>
</div>
</div>
</div>
所以在这个例子中,它会找到 id 为 n4 和 n2 的 div
解决方案
只需检查节点是否具有适当的类,并且仅在存在时才推送它
let nodes = [];
let element = document.getElementById('find');
nodes.push(element);
while (element.parentElement) {
if (element.parentElement.classList.contains('myclass')) {
nodes.unshift(element.parentElement);
}
element = element.parentElement;
}
console.log(nodes);
<div id="n1" class="something">
<div id="n2" class="myclass">
<div id="n3" class="something">
<div id="n4" class="myclass">
<button id="find"></button>
</div>
</div>
<div id="n5" class="something">
<div id="n6" class="myclass">
</div>
</div>
</div>
</div>
推荐阅读
- c++ - 如何根据 .first 值从 std::pair 的 std::vector 中删除元素?
- sql - 带有和不带有聚合的 sql 查询
- r - 我可以将具有两列的向量乘以具有三列和 3939 行的数据库吗?
- php - 使用 IPv6 代理的 curl 不起作用。错误:网络不可达
- python - 不存储函数返回值的 multiprocessing.map 的替代方案
- ios - 我将如何使插入分组的 UITavleView 显示为这样?
- regex - 跳过包含在我正在寻找的模式中的正则表达式模式
- apache-spark - PySpark:将 nullType 字段转换为结构类型列下的字符串
- php - 如何在 Shopware 5 商品网址中使用自定义字段?
- r - 向 data.frame 添加一个新列,其值是一列的随机样本并以另一列为条件