后代选择器和jQuery中的选择器有什么区别?

Descendant选择器和:has选择器有什么区别?

从文档:

后代选择器

描述:选择作为给定祖先后代的所有元素。

元素的后代可以是该元素的子元素,孙子元素,曾孙子元素等等。

:具有

描述:选择包含至少一个与指定选择器匹配的元素的元素。

表达式$('div:has(p)')匹配

如果

存在于其后代中的任何位置,而不仅仅是直接子项。

即使在阅读了解释之后,差异也不明确。 有人可以帮我理解吗?

div p的后代选择器选择div p p后代。

:has() div:has(p) :has()选择器div:has(p)如果包含任何p元素,则选择div

大胆的部分是您需要知道的。 其余的可以看作是选择这些类型的哪些元素的条件


在CSS选择器术语中, 键选择器是最右侧的外部简单选择器。 jQuery(或浏览器的CSS解析器)拾取的元素类型是键选择器中的元素。

在第一个选择器中,键是p ,因为它是最右边的一个,发生在后代组合子(空格)之后。 这意味着将返回p元素的集合。

对于:has() ,它是一个伪类, p是一个“内部”简单选择器,它是:has()伪类的一部分,不是整个“外部”选择器的一部分。 因此选择器中的键是div ,而不是p 。 这意味着将返回div元素的集合,而不是p一个选择器中的p元素。

descendants -selector将选择实际的后代,而:has -selector将选择包含has()中元素的父元素。