javascript - 在 vanilla JavaScript 中删除所有具有特定子元素(嵌套至少 2 层)的元素

标签 javascript html css conditional-statements

假设我有 2 个 HTML 对象。

第一个是1个div对象:

<div class="d1">
</div>

第二个是具有各自嵌套的 3 个 div 对象:

<div class="d1">
    <div class="d2">
        <div class="d3">
        </div>
    </div>
</div>

如您所见,第三个是最深的。

我们还假设我有一个包含第一个对象的 50 个元素和第二个对象的 50 个元素的网页。

我怎样才能删除所有包含嵌套在其中的特定元素的 HTML 对象(在本例中,带有 .d3 的元素)。

我能做到:

let f = document.querySelector('.d1');
let s = document.querySelector('.d2');
let t = document.querySelector('.d3');

if (t.parentNode == s && s.parentNode == f) {
    f.remove();
}

在 jQuery 中我也可以这样做:

if( $(f)[1].hasChildNodes() ) {
    f.remove();
}

在 vanilla JS 中执行此操作的有效方法是什么?

更新:

为了一个简单的例子,我使用了一个 3 级对象。请假设我们可以定位更多的 child ,比如第 300 个 child 。例如,如果对象包含 30 或 300(而不是 3)的 child ,则删除该对象。一个答案建议为相关 child (例如, child 编号 55)添加一个 id。我认为这是覆盖更大集合的好方法。

最佳答案

您可以使用 ".d1 > .d2 > .d3" 选择器选择此类嵌套元素,然后使用 removeChildremove 删除它们> 功能。

var d3Elements = document.querySelectorAll(".d1 > .d2 > .d3");

for(var i = 0; i < d3Elements.length; i++) {
  console.log(d3Elements[i]);
  d3Elements[i].parentElement.removeChild(d3Elements[i]);
}
<div class="d1">
  D1
</div>
<div class="d1">
  D1
  <div class="d2">
    D2
    <div class="d3">
      D3
    </div>
  </div>
</div>

关于javascript - 在 vanilla JavaScript 中删除所有具有特定子元素(嵌套至少 2 层)的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46822532/

相关文章:

javascript - 使用ajax调用后返回 View

php - AdminLTE-3 激活侧边导航栏

javascript - 动画滚动到带有 ID 的 div

JQuery:执行函数后隐藏 Div(奇怪的选择器)

html - 有没有更好的方法来完成这个看似简单的三栏布局呢?

javascript - 单击标签时如何选中复选框?

javascript - scrollTop 函数的 jQuery 延迟

html - 如何在 iOS 8 上启用书签网站图标?

html - 在文本区域内保持填充

javascript - 使用自定义按钮控制Soundcloud HTML5 Widget Player