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

时间:2011-02-21 14:20:40

标签: javascript jquery jquery-selectors

Descendant selector:has selector之间的区别是什么?

来自文档:

  

后代选择器

     

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

     

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

  

:具有

     

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

     

表达式$('div:has(p)')<div>匹配,如果<p>存在于其后代中的任何位置,而不仅仅是直接子项。

即使在阅读了解释之后,我也不清楚其中的区别。有人可以帮我理解吗?

2 个答案:

答案 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()中元素的父元素