javascript 仅向具有子元素的元素添加样式

c6ubokkw  于 2023-01-08  发布在  Java
关注(0)|答案(2)|浏览(212)

我有多个类名相同的<p>,但只有一个有一个孩子,我试图只突出显示有一个孩子的<p>,但我的代码突出显示了所有的<p>

window.onload = function() {
  var highlight = document.getElementsByClassName('parent');

  for (let i = 0; i < highlight.length; i++) {
    if (document.querySelectorAll(".parent .child").length > 0) {
      highlight[i].style.backgroundColor = "yellow";
    }
  }
}
<p class="parent">
  Testing 1
</p>
<p class="parent">
  Testing 2
  <span class="child">
    test
  </span>
</p>
<p class="parent">
  Test 3
</p>
<p class="parent">
  Testing 4
</p>
yuvru6vn

yuvru6vn1#

在最近的浏览器中,你可以用一个选择器字符串来完成这个操作--选择.parent s,它有一个:has(> .child)的子元素。

for (const p of document.querySelectorAll('.parent:has(> .child)')) {
  p.style.backgroundColor = "yellow";
}
<p class="parent">
  Testing 1
</p>
<p class="parent">
  Testing 2
  <span class="child">
    test
  </span>
</p>
<p class="parent">
  Test 3
</p>
<p class="parent">
  Testing 4
</p>

否则,按照当前的代码,必须引用正在迭代的元素(highlight[i]),并在其上调用querySelector,以查看该元素是否有任何匹配的子元素。
一个二个一个一个

jq6vz3qz

jq6vz3qz2#

我不会使用javascript来实现这个功能,只需要使用has选择器即可

p:has(span) {
    background-color:#f00!important
}

相关问题