$(“div p”)是否相当于$(“div * p”)?

时间:2015-01-15 10:00:40

标签: jquery jquery-selectors

明星运算符似乎会递归所有选定的孩子,这与空间相同。我发现空间就像一个运算符一样奇怪但$("div p")$("div*p")的作用相同。

2 个答案:

答案 0 :(得分:7)

不,这不等同。星形运算符意味着至少需要一个元素位于它们之间。等效的选择器表达式是

p * div, p > div

匹配两种情况。 Selectors level 4很可能会引入另一个运营商

p >> div

确实相当于p<space>div

对于jQuery部分:如果您编写$('p div')或任何其他选择器,您将熟悉HTML中的自动关闭元素。在这种特定情况下:div元素不能位于p元素内。当浏览器遇到p时,它会自动关闭div。如果你从这开始:

<p>
    <div></div>
</p>

您的DOM将如下所示:

<p></p>
<div></div>
<p></p>

因此永远不会匹配任何p divp * div,...请参阅此JSFiddle(注意:将两次执行alert())。

编辑:正如@Bharadwaj在评论中指出的那样,p*div的符号是错误的,永远不会匹配。原因是,*placeholder for an element name,因此必须用空格包围。

答案 1 :(得分:4)

在此HTML中:

<div>
  <p>Paragraph 1</p>
  <div>
    <p>Paragraph 2</p>
  </div>
</div>

div p选择两个段落,表示p内任意位置的div元素。
div * p只有嵌套的一个,因为*代表任何元素(因此p内的任何元素内都有div

http://jsfiddle.net/21ru2x5c/

BTW p div不应匹配任何内容,因为您在段落中不能包含块级元素。浏览器在解析DOM时打开块级元素之前关闭<p>元素:http://jsfiddle.net/21ru2x5c/1/