【发布时间】:2010-10-20 04:59:31
【问题描述】:
我有一个粗糙的导航结构,可以概括为:
<ul id="navigation">
<li>
A
<ul>
<li>
B
<ul>
<li>C</li>
</ul>
</li>
<li>
D
<ul>
<li>
E
<ul>
<li>F</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
子项在悬停之前一直隐藏。我想通过样式来表明 B、D 和 E 有子项,所以我使用了选择器:
$('#navigation > li li:has(ul)')
仅返回 B 和 D。将其更改为:
$('#navigation > li li').has('ul')
退回了所有正确的物品,但我不知道为什么。
编辑
:has() 似乎(完全)不受嵌套的影响
$('#navigation ul > li:has(ul)')
返回与上述.has() 相同的结果。
【问题讨论】:
-
在我看来结果应该是一样的。我不知道他们为什么不一样。当找到匹配项时,也许 Sizzle 会放弃查找嵌套元素。如果是这样,这似乎忽略了相同嵌套元素的可能性(就像您在示例中所看到的那样)。
标签: jquery