Descendant selector和:has selector之间的区别是什么?
来自文档:
后代选择器
描述:选择作为给定祖先后代的所有元素。
元素的后代可以是该元素的子孙,孙子等等。
:具有
描述:选择包含至少一个与指定选择器匹配的元素的元素。
表达式
$('div:has(p)')
与<div>
匹配,如果<p>
存在于其后代中的任何位置,而不仅仅是直接子项。
即使在阅读了解释之后,我也不清楚其中的区别。有人可以帮我理解吗?
答案 0 :(得分:10)
div p
中的后代选择器会选择p
的{{1}} 后代。
div
中的:has()
选择器会选择div:has(p)
,如果它包含任何div
元素。
大胆的部分是您需要知道的。其余部分可以被视为条件关于选择这些类型的哪些元素。
在CSS选择器术语中,键选择器是最右侧的外部简单选择器。 jQuery(或浏览器的CSS解析器)获取的元素类型是键选择器中的元素。
在第一个选择器中,键是p
,因为它是最右边的一个,发生在后代组合子(空格)之后。这意味着将返回p
个元素的集合。
对于p
,它是一个伪类,:has()
是一个“内部”简单选择器,它是 p
伪类<的一部分/ em>,不是整个“外部”选择器的一部分。因此,该选择器中的键是:has()
,而不是div
。这意味着将返回p
元素的集合,而不是第一个选择器中的div
元素。
答案 1 :(得分:1)
descendants
- 选择器将选择实际后代,而:has
- 选择器将选择包含has()中元素的父元素