假设我有以下 HTML:
<div class="foo">
<ul>
<li>One</li>
<li>Two</li>
</ul>
</div> <!-- not originally here -->
<div class="bar">
<ul>
<li>Three</li>
<li>Four</li>
</ul>
</div>
我想选择所有不是li
具有 class 的元素的后代的元素。我知道我可以用一个花哨的过滤功能来做到这一点,但我想知道我是否可以只用一个选择器来做到这一点。首先我试过:foo
$(":not(.foo) li")
不幸的是,这不起作用,因为它li
有其他没有样式的祖先(ul
在这种情况下)。以下似乎有效;
$(":not(.foo) :not(.foo) li")
换句话说,选择所有li
没有祖先的元素,这些元素要么有类,要么有foo
自己的祖先类foo
。也许这是使用选择器的最佳/唯一方法,但我对:not
选择器的重复并不感到兴奋。那里有更好的想法吗?