testTableNest.html 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>layui</title>
  6. <meta name="renderer" content="webkit">
  7. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  8. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  9. <link rel="stylesheet" href="assets/libs/layui/css/layui.css"/>
  10. <!-- 注意:如果你直接复制所有代码到本地,上述css路径需要改成你本地的 -->
  11. </head>
  12. <body>
  13. <table class="layui-table" id="tableOut" lay-filter="tableOut"></table>
  14. <script type="text/javascript" src="assets/libs/layui/layui.js"></script>
  15. <!-- 注意:如果你直接复制所有代码到本地,上述js路径需要改成你本地的 -->
  16. <script>
  17. layui.use(['jquery', 'laydate', 'util', 'layer', 'table', 'form'], function ($, laydate, util, layer, table, form) {
  18. var tableData = [[1, '小明', 16], [2, '小红', 18]];
  19. // 假释真的需要默认点击搜索在下面table render过之后再调用$dom.click()即可
  20. //监听工具条
  21. table.on('tool(tableOut)', function (obj) { //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
  22. var data = obj.data; //获得当前行数据
  23. var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
  24. // 异常不要用它原来的这个作为tr的dom
  25. // var tr = obj.tr; //获得当前行 tr 的DOM对象
  26. var $this = $(this);
  27. var tr = $this.parents('tr');
  28. var trIndex = tr.data('index');
  29. if (layEvent === 'detail') { //查看
  30. //do somehing
  31. console.log(data);
  32. } else if (layEvent === 'del') { //删除
  33. layer.confirm('真的删除行么', function (index) {
  34. obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
  35. layer.close(index);
  36. //向服务端发送删除指令
  37. });
  38. } else if (layEvent === 'edit') { //编辑
  39. //do something
  40. //同步更新缓存对应的值
  41. obj.update({
  42. name: '123'
  43. , title: 'xxx'
  44. });
  45. } else if (layEvent === 'addRowTable') {
  46. // 外围的table的id + tableIn_ + 当前的tr的data-index
  47. $(this).attr('lay-event', 'fold').html('-');
  48. var tableId = 'tableOut_tableIn_' + trIndex;
  49. var _html = [
  50. '<tr class="table-item">',
  51. '<td colspan="' + tr.find('td').length + '" style="padding: 6px 12px;">',
  52. '<table id="' + tableId + '"></table>',
  53. '</td>',
  54. '</tr>'
  55. ];
  56. tr.after(_html.join('\n'));
  57. // 渲染table
  58. table.render({
  59. elem: '#' + tableId,
  60. data: data.friend || [],
  61. cols: [[
  62. {field: 'id', title: 'ID'},
  63. {field: 'name', title: '朋友姓名'},
  64. {field: 'age', title: '年龄'}
  65. ]],
  66. });
  67. // $(window).resize();
  68. } else if (layEvent === 'fold') {
  69. $(this).attr('lay-event', 'addRowTable').html('+');
  70. tr.next().remove();
  71. }
  72. });
  73. var tableIns = table.render({
  74. elem: '#tableOut',
  75. // data: [[1, '小明', 16],[2, '小红', 18]],
  76. data: [
  77. {
  78. id: 1, name: '小米', age: '16',
  79. friend: [{id: 2, name: '大米', age: '28'}, {id: 5, name: '小虎', age: '16'}]
  80. },
  81. {
  82. id: 2, name: '大米', age: '28',
  83. friend: [{id: 1, name: '小米', age: '28'}]
  84. },
  85. {id: 3, name: '小花', age: 0},
  86. {id: 4, name: '小甲', age: '28'},
  87. {id: 5, name: '小虎', age: '16'},
  88. {id: 6, name: '小贤', age: '28'}],
  89. page: {},
  90. cols: [[
  91. // {type: 'number', fixed: true},
  92. // {field: 'checkbox', type: 'checkbox', LAY_CHECKED:false, fixed: true},
  93. {
  94. field: 'btn',
  95. width: 50,
  96. align: 'center',
  97. templet: function (d) {
  98. return '<a style="width: 100%; height: 100%;cursor: pointer;" lay-event="addRowTable">+</a>'
  99. }
  100. },
  101. {field: 'id', title: 'ID', sort: true},
  102. {field: 'name', title: '名称', edit: true},
  103. {field: 'age', title: '年龄', sort: true}
  104. ]],
  105. });
  106. table.on('sort(tableOut)', function (obj) { //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
  107. //尽管我们的 table 自带排序功能,但并没有请求服务端。
  108. //有些时候,你可能需要根据当前排序的字段,重新向服务端发送请求,从而实现服务端排序,如:
  109. table.reload('tableOut', {
  110. initSort: obj //记录初始排序,如果不设的话,将无法标记表头的排序状态。 layui 2.1.1 新增参数
  111. , where: { //请求参数(注意:这里面的参数可任意定义,并非下面固定的格式)
  112. field: obj.field //排序字段
  113. , order: obj.type //排序方式
  114. }
  115. });
  116. });
  117. table.on('edit(tableOut)', function (obj) { //注:edit是固定事件名,test是table原始容器的属性 lay-filter="对应的值"
  118. // debugger;
  119. // this;
  120. console.log(obj.value); //得到修改后的值
  121. console.log(obj.field); //当前编辑的字段名
  122. console.log(obj.data); //所在行的所有相关数据
  123. });
  124. });
  125. </script>
  126. </body>
  127. </html>