查找div中的所有类,除非它们在此div中

时间:2015-05-11 07:42:49

标签: jquery html

可能是一个简单的但却无法实现的目标。

我怎么能:

查找根级别内的所有类" Tab Container"叫" on"除非他们在另一个嵌套" Tab容器"。这意味着我希望能够在没有标签A受影响的情况下更改标签1。

<ul class="Tab Container">
    <ul>
        <li<a href="#">Nav Tab 1</a></li>
    </ul>
<li class="on">Tab 1</li>
<li>Tab 2</li>
<li>Tab 3</li>
<li>
<ul class="Tab Container">
<li class="on">Tab A</li>
<li>Tab B</li>
</ul>
</li>
</ul>

是否与.not?

有关
$tab.closest('.Tab Container').find('.on').not('Tab Container')

谢谢!

2 个答案:

答案 0 :(得分:1)

实现它的一种方法是使用像这样的选择器

$('.tab-container .on:not(.tab-container .tab-container .on)')

它将匹配on类的所有元素,这些元素嵌套在tab-container中,而不是tab-container中具有tab-container父元素的

jsFiddle example

请注意将带空格的课程视为两个单独的课程

答案 1 :(得分:1)

在班级列表中,空格是分隔符 因此,class="Tab Container"会为您的ul两个班级提供TabContainer 因此,在选择元素时,您必须在两者前面放置.

在CSS选择器中,空格表示“内部”,因此.Tab .Container表示“具有Container类的元素位于具有Tab类”的元素内的某个元素。 要使其应用于同一元素,请删除空格: .Tab.Container

此外,您可以使用CSS伪选择器:not而不是调用.not(),这应该更快(基本上与Teneff's answer相同,但适用于您的HTML):

$('.Tab.Container .on:not(.Tab.Container .Tab.Container .on)')

这应该适用于class="on"元素中class="Tab Container"的所有元素,该元素不能位于具有class="Tab Container"的其他元素中。