jQuery Datatables rowGroup Collapse/Expand

后端 未结 4 1591
无人及你
无人及你 2021-01-03 04:44

I\'m using jQuery Datatables and I would like to incorporate row grouping into the table.

I have attempted to incorporate it myself by adding rows and a click event

4条回答
  •  难免孤独
    2021-01-03 05:04

    First add a state to keep track of collapsed groups:

     var collapsedGroups = {};
    

    Next, add this to the Datatable initialization to enable the rowGroup plugin. It works by checking collapapsedGroups and then this info to hide or show the rows. It also adds a css-class indicating if it's collapsed or not:

     {
        rowGroup: {
            // Uses the 'row group' plugin
            dataSrc: 'product.category',
            startRender: function (rows, group) {
                var collapsed = !!collapsedGroups[group];
    
                rows.nodes().each(function (r) {
                    r.style.display = collapsed ? 'none' : '';
                });    
    
                // Add category name to the . NOTE: Hardcoded colspan
                return $('')
                    .append('' + group + ' (' + rows.count() + ')')
                    .attr('data-name', group)
                    .toggleClass('collapsed', collapsed);
            }
      }
    

    Finally, add a handler for clicking on the row for collapsing/expanding rows. This causes a redraw of the table which, in turn, calls startRender above:

       $tbody.on('click', 'tr.group-start', function () {
            var name = $(this).data('name');
            collapsedGroups[name] = !collapsedGroups[name];
            table.draw();
        });
    

    Here is a working example.

提交回复
热议问题