选择元素,除非它使用只是选择一个给定类的祖先(Select element unless it ha

2019-07-05 07:34发布

假设我有以下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 与类元素的后代元素foo 。 我知道我可以看上做过滤功能 ,但我不知道我是否可以只选择这样做。 首先我想:

$(":not(.foo) li")

不幸的是,这并不工作,因为li其他的祖先没有风格(在ul在这种情况下)。 下面似乎工作;

$(":not(.foo) :not(.foo) li")

换句话说,选择所有li有没有祖先,要么具有类元素foo还是有它自己的带班的祖先foo 。 也许这是一个选择做最好的/唯一的办法,但我不激动不已的重复:not选择。 更好的想法了吗?

小提琴

Answer 1:

你可以像下面这样做

$("li").not('.foo li')

http://jsfiddle.net/y7s54/

要么

$("li:not(.foo li)")

http://jsfiddle.net/QpCYY/

选择没有与Foo类的祖先所有李时珍



Answer 2:

尝试li:not(.foo > ul > li) ; 选择所有LIS减去那些与父母包含.foo向上两级。



Answer 3:

您可以使用上下文做它用选择的下沿,

$('li', $('div:not(.foo)'))

现场演示

$('li', $('div:not(.foo)')).each(function(){
    alert($(this).text());
});​


Answer 4:

这个怎么样:

$("li:not(.foo > li)")

在文档的意见是,如果这不起作用非常有用:

http://api.jquery.com/not-selector/



Answer 5:

我觉得这个解决方案看起来更好一点,但有一个有点争议的关于速度的差异API意见。

$("li").not(".foo li")

小提琴



文章来源: Select element unless it has an ancestor of a given class using just a selector