Вы не можете смешивать <div>
s в <table>
, используйте вместо этого дополнительные элементы <tbody>
. В вашем обратном вызове this
- это элемент <td>
, у которого нет родных элементов, поэтому .next
не делает ничего полезного; Вы хотите вернуться назад, пока не достигнете того, что находится на той же глубине, что и .section
, которая вас интересует, и затем оттуда позвонить .next
.
Ваш HTML должен выглядеть примерно так:
<table id="main_table">
<thead>
<tr class="firstline">
<th>Column1</th>
<th>Column2</th>
<th>Column3</th>
<th>Column4</th>
</tr>
</thead>
<tbody>
<tr style="background-color:green; color:white">
<td colspan="4" class="flip"> Section 1 </td>
</tr>
</tbody>
<tbody class="section">
<tr>
<td>item 111</td>
<td>item 112</td>
<td>item 113</td>
<td>item 114</td>
</tr>
<!-- ... -->
А ваш обработчик кликов вот так:
$('.flip').click(function() {
$(this)
.closest('tbody')
.next('.section')
.toggle('fast');
});
Вызов .closest
восходит к вашим предкам, пока не найдет <tbody>
, а затем вы не позвоните .next
.
Обновлен jsfiddle: http://jsfiddle.net/ambiguous/Udxyb/4/