2020 年 1 月 5 日星期日
作者:Sandy Galloway

RowGroup 技巧和窍门

RowGroup 是一个非常有用的工具,可以在排序行时直观地显示数据组。RowGroup 扩展的 示例初始化 显示了初始化这些分组有多么容易。可以使用更为高级的分组,我将在下方介绍使用 RowGroup 的几种不同方法。

$('#example').DataTable( {
    order: [[3, 'asc']],
    rowGroup: {
        dataSrc: 2
    }
});

这种非常基本的 RowGroup 初始化将按第 2 列中的行所包含的任何内容对数据进行分组。

让我们展开一下——在这篇文章中,我将详细说明如何

  • 使用带有一个用于提供范围分组的功能的自定分组
  • 根据表中排序的列中的数据自动分组。

自定分组

利用 RowGroup,可以将行分组不仅仅是原始单元格数据。此示例利用 rowGroup.dataSrc 属性作为一个函数,允许处理数据,然后基于行的返回一个组名数据。

$('#basicRowGroup').DataTable( {
    order: [[3, 'asc']],
    rowGroup: {
        dataSrc: function ( row ) {
            var base = Math.floor(row[3] / 10);
            return "" + base + "0 - " + base + '9';
        }
    }
});

姓名职位办公地点年龄入职日期薪资
Tiger Nixon系统架构师爱丁堡612011-04-25$320,800
Garrett Winters会计师东京632011-07-25$170,750
Ashton Cox初级技术作者旧金山662009-01-12$86,000
Cedric Kelly高级 JavaScript 开发人员爱丁堡222012-03-29$433,060
Airi Satou会计师东京332008-11-28$162,700
Brielle Williamson集成专家纽约612012-12-02$372,000
Herrod Chandler销售助理旧金山592012-08-06$137,500
Rhona Davidson集成专家东京552010-10-14$327,900
Colleen HurstJavaScript 开发人员旧金山392009-09-15$205,500
Sonya Frost软件工程师爱丁堡232008-12-13$103,600
Jena Gaines办公室经理伦敦302008-12-19$90,560
Quinn Flynn支持主管爱丁堡222013-03-03$342,000
Charde Marshall区域总监旧金山362008-10-16$470,600
Haley Kennedy高级营销设计师伦敦432012-12-18$313,500
Tatyana Fitzpatrick区域总监伦敦192010-03-17$385,750
Michael Silva营销设计师伦敦662012-11-27$198,500
Paul Byrd首席财务官 (CFO)纽约642010-06-09$725,000
Gloria Little系统管理员纽约592009-04-10$237,500
Bradley Greer软件工程师伦敦412012-10-13$132,000
Dai Rios人事主管爱丁堡352012-09-26$217,500
Jenette Caldwell开发负责人纽约302011-09-03$345,000
Yuri Berry首席营销官 (CMO)纽约402009-06-25$675,000
Caesar Vance售前支持纽约212011-12-12$106,450
Doris Wilder销售助理悉尼232010-09-20$85,600
Angelica Ramos首席执行官 (CEO)伦敦472009-10-09$1,200,000
Gavin Joyce开发人员爱丁堡422010-12-22$92,575
Jennifer Chang区域总监新加坡282010-11-14$357,650
Brenden Wagner软件工程师旧金山282011-06-07$206,850
Fiona Green首席运营官 (COO)旧金山482010-03-11$850,000
Shou Itou区域营销东京202011-08-14$163,000
Michelle House集成专家悉尼372011-06-02$95,400
Suki Burks开发人员伦敦532009-10-22$114,500
Prescott Bartlett技术作者伦敦272011-05-07$145,000
Gavin Cortez团队负责人旧金山222008-10-26$235,500
Martena Mccray售后支持爱丁堡462011-03-09$324,050
Unity Butler营销设计师旧金山472009-12-09$85,675
Howard Hatfield办公室经理旧金山512008-12-16$164,500
Hope Fuentes秘书旧金山412010-02-12$109,850
Vivian Harrell财务总监旧金山622009-02-14$452,500
Timothy Mooney办公室经理伦敦372008-12-11$136,200
Jackson Bradshaw总监纽约652008-09-26$645,750
Olivia Liang支持工程师新加坡642011-02-03$234,500
布鲁诺·纳什软件工程师伦敦382011-05-03$163,500
樱花·山本支持工程师东京372009-08-19$139,575
托尔·沃尔顿开发人员纽约612013-08-11$98,540
芬恩·卡马乔支持工程师旧金山472009-07-07$87,500
塞尔日·鲍德温数据协调员新加坡642012-04-09$138,575
塞内达·弗兰克软件工程师纽约632010-01-04$125,250
索里塔·塞拉诺软件工程师旧金山562012-06-01$115,000
詹妮弗·阿科斯塔初级 JavaScript 开发人员爱丁堡432013-02-01$75,650
卡拉·史蒂文斯销售助理纽约462011-12-06$145,600
赫敏·巴特勒区域总监伦敦472011-03-21$356,250
莱尔·格里尔系统管理员伦敦212009-02-27$103,500
乔纳斯·亚历山大开发人员旧金山302010-07-14$86,500
谢德·迪克尔区域总监爱丁堡512008-11-13$183,000
迈克尔·布鲁斯JavaScript 开发人员新加坡292011-06-27$183,000
唐娜·斯奈德客户支持纽约272011-01-25$112,000
姓名职位办公地点年龄入职日期薪资

发生的情况是当 RowGroup 检查要把行添加到哪个组时,每当它调用 rowGroup.dataSrc 时;它将运行此函数而不是仅仅查看存储在列中的一列的数据。通过获取列中的数据并对其进行操作,可以将行以多种不同的方式分组在一起。

另一个基本但有用的函数可以是从 name 中提取第一个字符,并将其以三人一组进行分组 - 即 [ABC][DEF]、...

基于顺序的自动行分组

也可以根据要排序的列中设置自动分组,如下面的示例所示

var table = $('#MultiGrouping')
    .on('order.dt', function(e, ctx, order) {
        var api = new $.fn.DataTable.Api(this);
        var orderingArr = [];

        for (var i=0 ; i<order.length ; i++) {
            orderingArr.push(order[i].col);
        }

        api.rowGroup().dataSrc(orderingArr);
    })  
    .DataTable({
        pageLength: 25,
        rowGroup: true
    });

姓名职位办公地点年龄入职日期薪资
Tiger Nixon系统架构师爱丁堡612011-04-25$320,800
Garrett Winters会计师东京632011-07-25$170,750
Ashton Cox初级技术作者旧金山662009-01-12$86,000
Cedric Kelly高级 JavaScript 开发人员爱丁堡222012-03-29$433,060
Airi Satou会计师东京332008-11-28$162,700
Brielle Williamson集成专家纽约612012-12-02$372,000
Herrod Chandler销售助理旧金山592012-08-06$137,500
Rhona Davidson集成专家东京552010-10-14$327,900
Colleen HurstJavaScript 开发人员旧金山392009-09-15$205,500
Sonya Frost软件工程师爱丁堡232008-12-13$103,600
Jena Gaines办公室经理伦敦302008-12-19$90,560
Quinn Flynn支持主管爱丁堡222013-03-03$342,000
Charde Marshall区域总监旧金山362008-10-16$470,600
Haley Kennedy高级营销设计师伦敦432012-12-18$313,500
Tatyana Fitzpatrick区域总监伦敦192010-03-17$385,750
Michael Silva营销设计师伦敦662012-11-27$198,500
Paul Byrd首席财务官 (CFO)纽约642010-06-09$725,000
Gloria Little系统管理员纽约592009-04-10$237,500
Bradley Greer软件工程师伦敦412012-10-13$132,000
Dai Rios人事主管爱丁堡352012-09-26$217,500
Jenette Caldwell开发负责人纽约302011-09-03$345,000
Yuri Berry首席营销官 (CMO)纽约402009-06-25$675,000
Caesar Vance售前支持纽约212011-12-12$106,450
Doris Wilder销售助理悉尼232010-09-20$85,600
Angelica Ramos首席执行官 (CEO)伦敦472009-10-09$1,200,000
Gavin Joyce开发人员爱丁堡422010-12-22$92,575
Jennifer Chang区域总监新加坡282010-11-14$357,650
Brenden Wagner软件工程师旧金山282011-06-07$206,850
Fiona Green首席运营官 (COO)旧金山482010-03-11$850,000
Shou Itou区域营销东京202011-08-14$163,000
Michelle House集成专家悉尼372011-06-02$95,400
Suki Burks开发人员伦敦532009-10-22$114,500
Prescott Bartlett技术作者伦敦272011-05-07$145,000
Gavin Cortez团队负责人旧金山222008-10-26$235,500
Martena Mccray售后支持爱丁堡462011-03-09$324,050
Unity Butler营销设计师旧金山472009-12-09$85,675
Howard Hatfield办公室经理旧金山512008-12-16$164,500
Hope Fuentes秘书旧金山412010-02-12$109,850
Vivian Harrell财务总监旧金山622009-02-14$452,500
Timothy Mooney办公室经理伦敦372008-12-11$136,200
Jackson Bradshaw总监纽约652008-09-26$645,750
Olivia Liang支持工程师新加坡642011-02-03$234,500
布鲁诺·纳什软件工程师伦敦382011-05-03$163,500
樱花·山本支持工程师东京372009-08-19$139,575
托尔·沃尔顿开发人员纽约612013-08-11$98,540
芬恩·卡马乔支持工程师旧金山472009-07-07$87,500
塞尔日·鲍德温数据协调员新加坡642012-04-09$138,575
塞内达·弗兰克软件工程师纽约632010-01-04$125,250
索里塔·塞拉诺软件工程师旧金山562012-06-01$115,000
詹妮弗·阿科斯塔初级 JavaScript 开发人员爱丁堡432013-02-01$75,650
卡拉·史蒂文斯销售助理纽约462011-12-06$145,600
赫敏·巴特勒区域总监伦敦472011-03-21$356,250
莱尔·格里尔系统管理员伦敦212009-02-27$103,500
乔纳斯·亚历山大开发人员旧金山302010-07-14$86,500
谢德·迪克尔区域总监爱丁堡512008-11-13$183,000
迈克尔·布鲁斯JavaScript 开发人员新加坡292011-06-27$183,000
唐娜·斯奈德客户支持纽约272011-01-25$112,000
姓名职位办公地点年龄入职日期薪资

此处,我们正在使用 rowGroup().dataSrc() API 方法。通过在 order 的回调中放置它,每当更改列排序时,它都将被调用,从而允许我们异步更新行分组源。在回调中,我们所做的一切就是从传递到回调中的数据中提取正在进行排序的列。然后,我们将这些列转换为简单的整数数组,该数组又传递给 rowGroup().dataSrc() API 方法。通过使用数组,我们允许在针对多列排序时进行子分组。

同样值得注意的是在 DataTable 之前添加事件侦听器的重要性。以这种方式进行操作可以考虑 DataTable 的初始顺序。如果我们在 DataTable 之后初始化回调,那么你的排序和行分组可能不匹配。