2015-04-28 4 views
0

Учитывая следующий пример вложенный список:Скрыть определенные элементы вложенного списка на основе класса

<ul id="toplist"> 
 
    <li>Item 1</li> 
 
    <ul> 
 
     <li class="active">Item 1a</li> 
 
     <li>Item 1b</li> 
 
    </ul> 
 
    <li>Item 2</li> 
 
    <ul> 
 
     <li>Item 2a</li> 
 
     <li>Item 2b</li> 
 
    </ul> 
 
    <li>Item 3</li> 
 
    <ul> 
 
     <li>Item 3a</li> 
 
     <li>Item 3b</li> 
 
    </ul> 
 
</ul>

Я хочу, чтобы иметь возможность скрыть все на высшем уровне li, что не имеет ребенок с классом active. Так в приведенном выше примере Пункт 2 и его дети должны быть скрыты, а также Позиция 3 и его дети. Пункт 1 и его дети должны оставаться.

Я пытался что-то вроде:

$("#toplist").not(".active").hide(); 

Но это было уничтожить все.

+4

Ваш HTML является недействительным , – j08691

+0

Где ваш код jQuery? –

+0

Извинения, я пытался сделать что-то вроде $ ("# toplist"). Not (". Active"). Hide(); но это уничтожило все. Извините, не было известно о требовании опубликовать jquery. Не пытался никого обидеть, просто пытаясь спасти себя от смущения. Очевидно, не удалось на обоих. – gsmith140

ответ

0

Предполагая, что вы исправить неверный HTML (вы не можете иметь <ul> как ребенок другого <ul>, только <li>), это работает:

$('#toplist > li').each(function() { 
 
    if (!$(this).find('li.active').length) $(this).hide(); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<ul id="toplist"> 
 
    <li>Item 1 
 
     <ul> 
 
      <li class="active">Item 1a</li> 
 
      <li>Item 1b</li> 
 
     </ul> 
 
    </li> 
 
    <li>Item 2 
 
     <ul> 
 
      <li>Item 2a</li> 
 
      <li>Item 2b</li> 
 
     </ul> 
 
    </li> 
 
    <li>Item 3 
 
     <ul> 
 
      <li>Item 3a</li> 
 
      <li>Item 3b</li> 
 
     </ul> 
 
    </li> 
 
</ul>

+0

Спасибо, что сработало. Написал список html быстро, не заметил ошибки, спасибо. – gsmith140

+0

Downvoter поможет объяснить проблему с ответом? – j08691

+0

'$ ('# toplist> li: not (: has (". Active "))'). Hide()' должен работать с исправленным HTML. Это намного короче и вполне читаемо. – Regent

Смежные вопросы