E> F和E + F选择器之间的区别?

我在jQuery中读到:

E>F匹配标记名为F所有元素,它们是E直接子元素。

E+F匹配标签名称为F所有元素,其前面紧跟着标签名称E的兄弟。

两者有什么区别? 能提供一个明确而具体的例子吗?

首先,当jQuery借用CSS中的>+时,它们的行为与Selectors规范中描述的相同; 看儿童组合子和相邻的兄弟组合子 。


“Children”指的是嵌套在另一个元素中的一个级别的元素。 为了强调立即嵌套的限制,这些可以被称为“直接儿童”,如文档中所述,但它们的含义相同。 包含在任何嵌套深度中的元素称为“后代”; 这包括儿童,孙子孙女,曾孙子孙女等。

选择器E>F仅匹配以下结构中的F元素:

    

但不是在以下结构中(将与EF匹配, D>F或甚至E>D>F ):

      

在这个答案中可以找到更真实的插图。 如前所述,尽管它涵盖了CSS,但它仍然是相同的,因为jQuery无论如何都要从CSS借用它。


“兄弟姐妹”指的是同一嵌套级别的元素; 即属于同一父元素的子元素。 可以有下一个/后一个兄弟姐妹和前一个/前一个兄弟姐妹,只要它们共享同一个父母,但在这种情况下,“紧接在E元素之前的F元素”指的是紧跟在E元素之后的F元素,他们之间没有其他兄弟元素。

选择器E+F仅匹配以下结构中的F元素:

   

但不是在以下结构中(将与E~FD+F或甚至E+D+F匹配):

    

在这个答案中可以找到更真实的插图。


最后,这是一个具有各种元素的更复杂的场景,显示哪些F元素与上述哪个选择器匹配以进行比较:

                 

E> F =父>已选中

    

E + F = preceding_sibling +已选中

     

以下DOM结构应该解释兄弟姐妹和孩子之间的区别:

 -- Element -- Sibling -- Sibling -- Child -- Another Child -- Sibling 

$('E>F').css({fontWeight:'bold'}); = E的直接子女


粗体文字
//这里’F’不是E的直接子女

$('E+F').css({fontWeight:'bold'}); = F喜欢E的下一个兄弟


粗体文字

//这里’F’前面没有E

操场