假设我有以下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>
我想选择所有{em} 元素的li
个元素,这些元素是类foo
的元素的后代。我知道我可以用花哨的filter function做到这一点,但我想知道我是否可以只选择一个选择器。首先我试过了:
$(":not(.foo) li")
不幸的是,这不起作用,因为li
的其他祖先没有样式(在这种情况下为ul
)。以下似乎有效;
$(":not(.foo) :not(.foo) li")
换句话说,选择所有没有祖先的li
元素,这些元素具有类foo
或者具有类foo
的祖先。也许这是使用选择器执行此操作的最佳/唯一方法,但我对:not
选择器的重复感到不满。那里有更好的想法吗?
答案 0 :(得分:30)
你可以这样做
$("li").not('.foo li')
或
$("li:not(.foo li)")
选择所有没有类foo
的祖先的li答案 1 :(得分:4)
尝试li:not(.foo > ul > li)
;选择所有lis减去父母.foo两个级别的那些。
答案 2 :(得分:2)
你可以使用上下文和选择器一起使用
$('li', $('div:not(.foo)'))
<强> LIve Demo 强>
$('li', $('div:not(.foo)')).each(function(){
alert($(this).text());
});
答案 3 :(得分:0)
答案 4 :(得分:0)