【问题标题】:Trying to show extra information in a responsive DataTable尝试在响应式 DataTable 中显示额外信息
【发布时间】:2016-04-14 09:31:22
【问题描述】:

我刚开始使用 DataTables,我正在尝试在响应式 DataTable 中显示额外信息(通过 AJAX 检索)。

额外信息示例 - Link 1

响应式表格示例 - Link 2

这意味着,在大屏幕上,表格将在展开时显示有关每一行的一些“额外信息”。 在一个小屏幕上,我希望表格显示额外信息,以及为响应目的而隐藏的行。

然而,这并没有发生。

  • 在大视图中,DataTable 仅显示扩展行的额外信息。这符合预期。
  • 但在较小的屏幕上,它只显示它隐藏的行,而之前显示的额外信息完全消失了。

有什么方法可以让我获得隐藏列和一些额外信息,以便在行展开时显示?

如果有人能帮我解决这个问题,我将不胜感激。

function format ( d ) {
    
    return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'+
        '<tr>'+
            '<td>Full name:</td>'+
            '<td>'+d.name+'</td>'+
        '</tr>'+
        '<tr>'+
            '<td>Extension number:</td>'+
            '<td>'+d.extn+'</td>'+
        '</tr>'+
        '<tr>'+
            '<td>Extra info:</td>'+
            '<td>And any further details here (images etc)...</td>'+
        '</tr>'+
    '</table>';
}

$(document).ready(function() {
    var table = $('#example').DataTable( {
        "ajax": "./data/arrays.txt",
        responsive: true,
        "columns": [
            {
                "className":      'details-control',
                "orderable":      false,
                "data":           null,
                "defaultContent": ''
            },
            { "data": "name" },
            { "data": "position" },
            { "data": "office" },
            { "data": "salary" }
        ],
        "order": [[1, 'asc']]
    } );
     
    $('#example tbody').on('click', 'td.details-control', function () {
        var tr = $(this).closest('tr');
        var row = table.row( tr );
 
        if ( row.child.isShown() ) {
            
            row.child.hide();
            tr.removeClass('shown');
        }
        else {
            
            row.child( format(row.data()) ).show();
            tr.addClass('shown');
        }
    } );
} );
<table id="example" cellspacing="0" class="display stripe compact row-border no-wrap" width="100%">
	<thead>
		<tr>
			<th>Expand</th>
       		<th>Name</th>
       		<th>Position</th>
       		<th>Office</th>
       		<th>Salary</th>
		</tr>
	</thead>
</table>

【问题讨论】:

    标签: jquery datatables


    【解决方案1】:

    您可以使用 custom child row renderer 和响应式扩展来为您的行生成自定义内容。

    var table = $('#example').DataTable({
        "responsive": {
            "details": {
                "renderer": function ( api, rowIdx, columns ) {
                    // Show hidden columns in row details
                    var data = $.map( columns, function ( col, i ) {
                        return col.hidden 
                           ? '<tr><td>'+col.title+':</td> '+
                             '<td>'+col.data+'</td></tr>' 
                           : '';
                     } ).join('');
    
                    // Extra: Show "Name" in row details
                    data += '<tr><td>Name:</td><td>' + api.cell(rowIdx, 0).data() + '</td></tr>';
                    // Generate a table
                    data = $('<table width="100%"/>').append( data ).prop('outerHTML');
    
                    // Extra: Show custom content
                    data += '<div class="content-custom">Custom content</div>';
    
                    return data;
                }
            }
        }
    });
    

    有关代码和演示,请参阅this jsFiddle。

    【讨论】:

    • 谢谢,这绝对是我需要的东西之一。但是,在小提琴中,即使所有列(直到列“Extra 10”)都可见,我能否让行展开并显示“自定义内容”?
    • @RahulMk,这是个好问题。请参阅jsfiddle.net/3fLwej4u/1,可能会有额外的空白列与特殊类none。我还不确定这是否是最有效的方法。
    • 太棒了!!这正是我需要的。我在很多帖子上看到了您的解决方案;我不知何故知道我会从 Gyrocode 那里得到我的。真的很感谢你的帮助。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    相关资源
    最近更新 更多