你可以这样试试:-
将一个类作为标题行的标题,并使用 nextUntil 获取单击的标题下方的所有行,直到下一个标题。
JS
$('.header').click(function(){
$(this).nextUntil('tr.header').slideToggle(1000);
});
HTML
<table border="0">
<tr class="header">
<td colspan="2">Header</td>
</tr>
<tr>
<td>data</td>
<td>data</td>
</tr>
<tr>
<td>data</td>
<td>data</td>
</tr>
DEMO
另一个例子:
$('.header').click(function(){
$(this).find('span').text(function(_, value){return value=='-'?'+':'-'});
$(this).nextUntil('tr.header').slideToggle(100); // or just use "toggle()"
});
DEMO
如果是动画切换,您还可以在切换完成后使用 Promise 切换跨度图标/文本。
$('.header').click(function () {
var $this = $(this);
$(this).nextUntil('tr.header').slideToggle(100).promise().done(function () {
$this.find('span').text(function (_, value) {
return value == '-' ? '+' : '-'
});
});
});
或者只是用一个css伪元素来表示展开/折叠的标志,然后在表头切换一个类。
CSS:-
.header .sign:after{
content:"+";
display:inline-block;
}
.header.expand .sign:after{
content:"-";
}
JS:-
$(this).toggleClass('expand').nextUntil('tr.header').slideToggle(100);
DEMO