table中嵌套多层table

港控/mmm° 2022-01-31 03:29 673阅读 1赞

因工作业务需求,需要展示一个多层嵌套的数据结构,现整理如下,分享给需要的朋友,应用框架vue2。
初始的数据结构如下:

  1. new Vue({
  2. el:"#table1",
  3. data:{
  4. table1:[{
  5. order: "ex-20171006",
  6. table2: [{
  7. kind: '苹果',
  8. table3: [{
  9. variety: '红富士',
  10. origin: '山东-德州'
  11. },{
  12. variety: '蓝富士',
  13. origin: '山东-威海'
  14. }]
  15. },{
  16. kind: '梨',
  17. table3: [{
  18. variety: '大鸭梨',
  19. origin: '山西-大同'
  20. },{
  21. variety: '雪花梨',
  22. origin: '山西-太原'
  23. }]
  24. }]
  25. }]
  26. }
  27. })

HTML部分:

  1. <table id="table1">
  2. <tr>
  3. <th>序号</th>
  4. <th>订单</th>
  5. <th class="w200">名称</th>
  6. <th class="w200">品种</th>
  7. <th class="w200">产地</th>
  8. </tr>
  9. <tr v-for="(item,i) in table1">
  10. <td>{
  11. {i}}</td>
  12. <td>{
  13. {item.order}}</td>
  14. <td colspan="3">
  15. <table class="table2">
  16. <tr v-for="(par, j) in item.table2">
  17. <td class="w200">{
  18. {par.kind}}</td>
  19. <td>
  20. <table class="table3">
  21. <tr v-for="val in par.table3">
  22. <td class="w200">{
  23. {val.variety}}</td>
  24. <td class="w200">{
  25. {val.origin}}</td>
  26. </tr>
  27. </table>
  28. </td>
  29. </tr>
  30. </table>
  31. </td>
  32. </tr>
  33. </table>

CSS部分:

  1. * {margin: 0;padding: 0;}
  2. body {
  3. padding: 20px;
  4. }
  5. table {
  6. width: 100%;
  7. border-collapse: collapse;
  8. text-align: center;
  9. }
  10. table th,td {
  11. border: 1px solid #999;
  12. }
  13. .table2 tr td:nth-child(1) {
  14. border-left: 0;
  15. }
  16. .table2 tr td:nth-last-child(1) {
  17. border-right: 0;
  18. }
  19. .table2 tr:nth-child(1) td{
  20. border-top: 0;
  21. }
  22. .table2 tr:nth-last-child(1) td {
  23. border-bottom: 0;
  24. }
  25. .w200 {
  26. width: 200px;
  27. }

实现效果:

20171006211834432

上述写法还有一个缺点,就是浏览器缩小到一定程度,表格的样式会变形,内部table与外部table的单元格线对不齐:

20171006213417897
解决方法,给最外围table加一个最小宽度,具体最小宽度定义多少视内部table的td宽度和td列数合计为参考值,此例子最小值设为1000px:

  1. #table1 {
  2. min-width: 1000px;
  3. }

最后效果图:

20171006214211705

20171006214230115

以上部分有不足之处,欢迎指出,谢谢。

以上只是自定义结构展示,殊不知Vue自带一个template模板标签,可以用v-for循环指令,渲染出来是没有实际标签的,特别适合table标签中循环渲染特殊的数据结构。

发表评论

表情:
评论列表 (有 0 条评论,673人围观)

还没有评论,来说两句吧...

相关阅读

    相关 table嵌套table

    因工作业务需求,需要展示一个多层嵌套的数据结构,现整理如下,分享给需要的朋友,应用框架vue2。  初始的数据结构如下: new Vue({     el