当前位置: > > > jQuery - 第三方表格插件DataTables使用详解15(行数据分组)

jQuery - 第三方表格插件DataTables使用详解15(行数据分组)

二十六、行数据分组

1,效果图

(1)表格默认将数据先按性别进行排序。
(2)当渲染完毕后,我们在相同性别的数据行上方插入一个分组头,从而将人员按性别分成两组显示。

2,样例代码

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="js/jquery-3.1.1.js"  type="text/javascript"></script>
    <script src="media/js/jquery.dataTables.js"  type="text/javascript"></script>
    <link rel="stylesheet" href="media/css/jquery.dataTables.css" type="text/css" />
    <style media="screen">
      tr.group, tr.group:hover {
        background-color: #ddd !important;
      }
    </style>
    <script type="text/javascript">
      $(document).ready(function() {
        var table = $('#myTable').DataTable({
            "ajax": 'data.txt',
            "order": [[2,'desc']],  //默认按3列(性别)数据降序排序 
            "drawCallback": function ( settings ) {
              var api = this.api();
              var rows = api.rows( {page:'current'} ).nodes();
              var last=null;
              //添加分组头
              api.column(2, {page:'current'} ).data().each( function ( group, i ) {
                  if ( last !== group ) {
                      $(rows).eq( i ).before(
                          '<tr class="group"><td colspan="4">'+group+'</td></tr>'
                      );
                      last = group;
                  }
              } );
            }
        });
      });
    </script>
  </head>
  <body>
    <table id="myTable">
        <thead>
            <tr>
                <th>编号</th>
                <th>姓名</th>
                <th>性别</th>
                <th>出生日期</th>
            </tr>
        </thead>
    </table>
  </body>
</html>

3,数据文件

{
  "data": [
     [
         "001",
         "张三",
         "男",
         "2011-11-23"
     ],
     [
         "002",
         "李四",
         "女",
         "2001-11-23"
     ],
     [
         "003",
         "刘士元",
         "男",
         "2021-08-21"
     ],
     [
         "004",
         "赵四",
         "男",
         "2008-08-08"
     ],
     [
         "005",
         "赵五",
         "女",
         "2008-08-08"
     ],
     [
         "006",
         "赵六",
         "男",
         "2008-08-08"
     ]
  ]
}

附:功能改进

既然我们按性别分组了,那么性别这一列自然可以给它隐藏掉(这个不影响数据的排序和分组)。
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="js/jquery-3.1.1.js"  type="text/javascript"></script>
    <script src="media/js/jquery.dataTables.js"  type="text/javascript"></script>
    <link rel="stylesheet" href="media/css/jquery.dataTables.css" type="text/css" />
    <style media="screen">
      tr.group, tr.group:hover {
        background-color: #ddd !important;
      }
    </style>
    <script type="text/javascript">
      $(document).ready(function() {
        var table = $('#myTable').DataTable({
            "ajax": 'data.txt',
            "columnDefs": [
                { "visible": false, "targets": 2 } //隐藏性别列
            ],
            "order": [[2,'desc']],  //默认按3列(性别)数据降序排序 
            "drawCallback": function ( settings ) {
              var api = this.api();
              var rows = api.rows( {page:'current'} ).nodes();
              var last=null;
              //添加分组头
              api.column(2, {page:'current'} ).data().each( function ( group, i ) {
                  if ( last !== group ) {
                      $(rows).eq( i ).before(
                          '<tr class="group"><td colspan="4">'+group+'</td></tr>'
                      );
                      last = group;
                  }
              } );
            }
        });
      });
    </script>
  </head>
  <body>
    <table id="myTable">
        <thead>
            <tr>
                <th>编号</th>
                <th>姓名</th>
                <th>性别</th>
                <th>出生日期</th>
            </tr>
        </thead>
    </table>
  </body>
</html>
评论0