2013-10-09 2 views
2

Как скрыть строку подзаголовка, если все следующие строки содержат определенный класс. Следующие строки останавливаются, когда следующий подзаголовок следующий. Как это можно выполнить для следующего подзаголовка?jQuery - скрыть подзаголовок, если следующие строки содержат

Пример: Скрыть строку SUBHEADER 2, потому что все следующие строки содержат «нет».

<table> 
<tr class='sub'> 
    <td colspan='3'>SUBHEADER 1</td> 
</tr> 
<tr class='row yes'> 
    <td>text</td> 
    <td>text</td> 
    <td>text</td> 
</tr> 
<tr class='row no'> 
    <td>text</td> 
    <td>text</td> 
    <td>text</td> 
</tr> 
<tr class='sub'> 
    <td colspan='3'>SUBHEADER 2</td> 
</tr> 
<tr class='row no'> 
    <td>text</td> 
    <td>text</td> 
    <td>text</td> 
</tr> 
<tr class='row no'> 
    <td>text</td> 
    <td>text</td> 
    <td>text</td> 
</tr> 
<tr class='sub'> 
    <td colspan='3'>SUBHEADER 3</td> 
</tr> 
<tr class='row yes'> 
    <td>text</td> 
    <td>text</td> 
    <td>text</td> 
</tr> 
</table> 
  • Я протестировал оба примера, и они работают, но они не работали на моей среде. Затем я понял, что представил неверный пример и извинился перед Габи и Татсом за мою ошибку.
+0

скрыть текстовые строки, а? или только строку '.sub'? –

+0

Только подводные лодки. Я допустил ошибку на моем примере и обновил ее. – dai

+0

Я обновил свой ответ .. –

ответ

1

Это должно сделать это

// for each subheader row 
$('tr.sub').each(function(){ 
    var self = $(this), 
     // find all following rows until the next subheader 
     rows = self.nextUntil('.sub'), 
     // check if any of those rows contains a .no class 
     hasNo = rows.find('.no').length > 0; 

    // hide subheader if no .no class was found 
    self.toggle(hasNo); 
}); 

Demo вhttp://jsfiddle.net/EA8AB/


Update (после уточнений в ОП)

Вы должны сравнить, если число следующих строк (, как описано выше), равно количество следующих .no строк ..

// for each subheader row 
$('tr.sub').each(function(){ 
    var self = $(this), 
     // find all following rows until the next subheader 
     rows = self.nextUntil('.sub'), 
     // check if rows number is equal with those of them that have the .no class 
     allAreNo = rows.filter('.no').length === rows.length; 

    // show/hide based on whether all are .no or not 
    self.toggle(!allAreNo); 
}); 

Demo вhttp://jsfiddle.net/EA8AB/2/

+0

Спасибо Габи за обновление. Он работает отлично. – dai

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