css 如何仅选择内部没有特定标记的标记

tvz2xvvm  于 2023-02-26  发布在  其他
关注(0)|答案(3)|浏览(113)

我希望能够使用querySelectorAll查询所有内部没有font标记的i元素。我尝试了以下选择器,但它不起作用:

console.log([...document.querySelectorAll('i > *:not(font)')])
<i>
   <font color="008000">Here goes some text</font>
</i>
<br />
<i>Here goes another text</i>
2w3kk1z5

2w3kk1z51#

这段代码并没有选择所有不包含font元素的i元素,而是选择了i的所有不包含font元素的子元素。

console.log([...document.querySelectorAll('i>*:not(font)')])
<i>
  <font color="008000">Here goes some text</font>
</i>
<br />
<i>Here goes another text</i>

对于你想要的行为,你需要在CSS中使用新的:has()选择器available in all major browsers(除了在firefox中的一个标志后面):
一个二个一个一个

wsxa1bj1

wsxa1bj12#

document.querySelectorAll('i:not(:has(font))');

应该可以的

xsuvu9jc

xsuvu9jc3#

因为要将querySelectorAll()返回的NodeList扩展到[...]的数组中,所以我们可以使用数组标准方法从其中删除DOM节点:

const elements = [...document.querySelectorAll("i")]
  .filter((el) => !el.querySelector("font"));
  
console.log(elements);
<i><font color="008000">Here goes some text</font></i>
<br>
<i>Select me!</i>
<i>And <b>me too</b>!</i>
<i>However, <span><font>I am doubly nested, don't select me</font></span></i>

相关问题