jquery - 尝试在响应式数据表中显示额外信息

标签 jquery datatables

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

额外信息示例 - Link 1

响应表示例 - Link 2

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

但是,这并没有发生。

  • 在大 View 中,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>

最佳答案

您可以使用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用于代码和演示。

关于jquery - 尝试在响应式数据表中显示额外信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36619015/

相关文章:

javascript - 根据 div 内的文本禁用提交按钮

javascript - 如何停止在 Flot 条形图中缩小?

javascript - 数据表 fnSort 建议

javascript - JQuery DataTables 和 Jeditable - 字段包含 html 但不应该。为什么?

angular - 使用 routerLink 渲染数据表中的列

javascript - Jquery cycle - 具有不同速度转换的幻灯片?

javascript - 如何在 onclick 后立即更改 Accordion 的图标

jquery - Bootstrap容器流体有左右边距

jquery - 从 DataTable 中获取列名

javascript - JSON 格式的 Ajax 源数据 - 无法获取未定义或空引用的属性 'length'