2015-12-16 404 views
10

enter image description hereHTML5 - 如何折叠和展开复杂的表格元素

您好,我需要一个表中的展开和折叠功能。最常见的代码是for,然后在js中为这个tr类定义一个函数。

但是我的情况比图片更复杂。单击“参数1”后,它将展开并显示合并的单元格和2个单元格。

那么在这种情况下,我该如何实现这个功能呢?提前致谢。

附件为表为测试一个简单的片断:

https://jsfiddle.net/knspgwkq/

HTML的测试表

<table width="200" border="1"> 
    <tr> 
    <td rowspan="5">Summary 1</td> 
    <td colspan="2"><div align="center">1 st level</div></td> 
    </tr> 
    <tr> 
    <td colspan="2"><div class="P1">Parameter 1</div></td> 
    </tr> 
    <tr> 
    <td rowspan="2">Sub level-1 </td> 
    <td>Sub parameter (1)</td> 
    </tr> 
    <tr> 
    <td>Sub parameter (2)</td> 
    </tr> 
    <tr> 
    <td colspan="2"><div class="P2">Parameter 2</div></td> 
    </tr> 
</table> 

JS

$('.P1').click(function(){ 
    $(this).find('span').text(function(_, value){return value=='-'?'+':'-'}); 
    $(this).nextUntil('.P2').slideToggle(100, function(){ 
    }); 
}); 
+0

嗨@ jcubic,我可以知道你已编辑? –

+0

他添加了标签“jquery” – phts

+0

当你有足够的信誉时,你可以编辑标签。 – jcubic

回答

3

如何将您的自定义数据属性添加到您想要控制的单元格中? 现场示例https://jsfiddle.net/knspgwkq/7/

您的父母将拥有一些关键值data-collapsable-parent。 你想要隐藏/显示上面的父母的孩子将拥有与父母相同的密钥值data-collapsable-child

如果您需要额外的折叠展开元素,请检查此示例 单击参数1,然后选择子参数(2),您将打开其他元素。

​​

$('[data-collapsable-parent]').click(function(){ 
 
    var child = $(this).attr("data-collapsable-parent"); 
 
    $('[data-collapsable-child="'+ child + '"]').toggle('slow'); 
 
});
[data-collapsable-child] { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table width="200" border="1"> 
 
    <tr> 
 
    <td rowspan="5">Summary 1</td> 
 
    <td colspan="2"><div align="center">1 st level</div></td> 
 
    </tr> 
 
    <tr> 
 
    <td colspan="2" data-collapsable-parent="1"><div class="P1">Parameter 1</div></td> 
 
    </tr> 
 
    <tr> 
 
    <td data-collapsable-child="1" rowspan="2">Sub level-1 </td> 
 
    <td data-collapsable-child="1" >Sub parameter (1)</td> 
 
    </tr> 
 
    <tr> 
 
    <td data-collapsable-child="1" >Sub parameter (2)</td> 
 
    </tr> 
 
    <tr> 
 
    <td colspan="2"><div class="P2">Parameter 2</div></td> 
 
    </tr> 
 
</table>

+0

但是根本没有动画 –

+0

我添加了一些动画:/不知道它是否符合需求。 – Paran0a

+0

雅,但你的动画真的看起来破碎imho。这就是说,你不能真正动画任何表格行 –

2

这里有一个想法:用两个切换,以获得向上崩塌效应,和向下扩大的效果(无需修改表结构)。

// Basic toggle without animation 
 
//$('.P1').on("click", function() { 
 
// $(this).closest("tr").nextUntil('.P2').toggle(); 
 
//}); 
 

 
// Better sliding toggle 
 
$('.P1').on("click", function() { 
 
    $trs = $(this).closest("tr").nextUntil('.P2'); 
 
    $trs.eq(1).find("td").eq(0).slideToggle(100, function() { 
 
    $trs.eq(0).slideToggle(100); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table width="200" border="1"> 
 
    <tr> 
 
    <td rowspan="5">Summary 1</td> 
 
    <td colspan="2"> 
 
     <div align="center">1 st level</div> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <td colspan="2"> 
 
     <div class="P1">Parameter 1</div> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <td rowspan="2">Sub level-1</td> 
 
    <td>Sub parameter (1)</td> 
 
    </tr> 
 
    <tr> 
 
    <td>Sub parameter (2)</td> 
 
    </tr> 
 
    <tr> 
 
    <td colspan="2"> 
 
     <div class="P2">Parameter 2</div> 
 
    </td> 
 
    </tr> 
 
</table>

+0

感谢您的想法,因为我已经接受Paran0a的答案,对不起,我不能同时接受2。但是很高兴知道这种方法 –

+0

嘿,不用担心。处理问题真的很有趣。 – Drakes