【问题标题】:Collapse all Child Rows as default in DataTables在 DataTables 中默认折叠所有子行
【发布时间】:2019-03-23 07:21:05
【问题描述】:

我正在从 codeigniter 控制器获取数据并使用数据表显示它。我想在子行中显示其他详细信息。我可以在单击按钮时打开和关闭以折叠所有子行,使其看起来像手风琴。所以我的问题是我想默认折叠所有子行,但仍然可以使用按钮关闭它。我已经阅读了许多解决方案,但仍然无法正常工作。这是我的代码

 function format ( d ) {
    // `d` is the original data object for the row
    return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
        '<tr>'+
            '<td>Add Ons</td>'+
            '<td>Remarks</td>'+
        '</tr>'+
        '<tr>'+
            '<td>---</td>'+
            '<td>'+d.remarks+'</td>'+
        '</tr>'+
    '</table>';
}

$(document).ready(function() {
    var table = $('#mydata').DataTable( {
             ajax: {
                 url: "/chef/get_orderlist",
                 dataSrc: ''
             },
            colReorder: {
            realtime: true
            },
            "aoColumns" : [
                {
                "className":      'details-control',
                "data":           null,
                "defaultContent": ''
                },
                {data : 'order_id'},
                {data : 'cust_name'},
                {data : 'table_code'},
                {data : 'menu_name'},
                {data : 'order_qty'},
                {
                    data: null,
                    render: function ( data, type, row, meta) {
                        return '<button id="status" class="status btn dt-buttons '+ data.item_status +
                        '" data-order_item_id="'+ data.order_item_id +'"'+
                        ' data-item_status="'+ data.item_status +'" onclick="change_status()">'+ data.item_status +'</button>';
                        }
                    }
                ]
            });

// FOR OPENING AND CLOSING THE ACCORDION
        $('#mydata tbody').on('click', 'td.details-control', function () {
                var tr = $(this).closest('tr');
                var row = table.row(tr);

                if ( row.child.isShown() ) {
                    // This row is already open - close it
                    row.child.hide();
                    tr.removeClass('shown');
                }
                else {
                    // Open this row
                    row.child( format(row.data()) ).show();
                    tr.addClass('shown');
                }
            } );

// THIS IS THE PART WHERE THE CHILD ROWS SHOULD BE OPENED AS "DEFAULT" 
         $("#mydata").DataTable().rows().every( function () {
                var tr = $(this.node());
                this.child(format(tr.data('child-value'))).show();
                tr.addClass('shown');
            });


} );

【问题讨论】:

    标签: javascript codeigniter datatables


    【解决方案1】:

    您复制了针对该特定问题量身定制的 this answer

    在您的情况下,正确的代码是:

    $('#mydata').on('init.dt', function(e, settings){
       var api = new $.fn.dataTable.Api( settings );
       api.rows().every( function () {
          var tr = $(this.node());
          this.child(format(this.data())).show();
          tr.addClass('shown');
       });
    });
    
    var table = $('#mydata').DataTable( {
       // ... skipped ...
    });
    

    有关更多示例和信息,请参阅jQuery DataTables: jQuery DataTables: How to expand/collapse all child rows

    【讨论】:

    • 感谢您的回答,但我尝试将代码替换为您的回答,似乎不起作用。
    • @studentfromSLU,我更正了代码。我想我需要在初始化表之前处理init 事件。
    • @Gyrodcode.com,成功了!谢谢你。这真的是一个很大的帮助!再次感谢您!
    猜你喜欢
    • 2021-06-19
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 2021-10-11
    • 1970-01-01
    • 2014-09-11
    相关资源
    最近更新 更多