如果没有数据,jQuery数据表不显示表

时间:2013-05-27 19:06:17

标签: jquery jquery-datatables

我正在使用带有服务器端获取数据的jquery数据表,我的问题是当数据表是空的数据表隐藏表并且没有显示时,我想显示表上没有任何数据的表消息,怎么样这个选项?

oTable_topics =$('#showTopics').dataTable({
    "bLengthChange": false,
    "bStateSave": true,
    "iDisplayLength": 12,                               
    "bScrollCollapse": true,       
    "bJQueryUI": true,
    "bAutoWidth": false,
    "sAjaxSource": "server_processing.php",
    "sPaginationType": "full_numbers",
    "bProcessing": true,
    // "fnCreatedRow": function( nRow, aData, iDataIndex ) {
     // $('td:eq(5)', nRow).html("<ul class='styledlist' style='width:80px !important;'><img src='http://localhost/shirazee/UI/images/icons/publish.png' style='border:none;'/></ul>");
    // },
    "fnDrawCallback": function(oSettings) {
        clickRowHandler_topics();
        if ( oSettings.aiDisplay.length == 0 )
        {
            return;
        }                       
        var nTrs = $('tbody tr', oSettings.nTable);
        var iColspan = nTrs[0].getElementsByTagName('td').length;
        var sLastGroup = "";
        for ( var i=0 ; i<nTrs.length ; i++ )
        {
            var iDisplayIndex = oSettings._iDisplayStart + i;
            var sGroup = oSettings.aoData[ oSettings.aiDisplay[iDisplayIndex] ]._aData[0];
            if ( sGroup != sLastGroup )
            {
                var nGroup = document.createElement( 'tr' );
                var nCell = document.createElement( 'td' );
                nCell.colSpan = iColspan;
                nCell.className = "group";
                nCell.innerHTML = sGroup;
                nGroup.appendChild( nCell );
                nTrs[i].parentNode.insertBefore( nGroup, nTrs[i] );
                sLastGroup = sGroup;
            }
        }
    },
    "aoColumnDefs": [
        { "bVisible": false, "aTargets": [ 0 ] }
    ],
    "aaSortingFixed": [[ 0, 'asc' ]],
    "aaSorting": [[ 1, 'asc' ]],
    "fnServerParams": function ( aoData ) {
      aoData.push(
         {"name": "id"   ,      "value": "i.id" },          
         {"name": "subject"   , "value": "i.subject" },
         {"name": "date_time",  "value": "i.date_time"} ,
         {"name": "posted_by",  "value": "u.username"} ,
         {"name": "ctitle"   ,  "value": "c.title"} ,
         {"name": "etitle"   ,  "value": "e.title"},
         {"name": "istatus"   ,  "value": "i.status"},
         {"name": "join"     ,  "value": "JOIN categories c ON i.category = c.id JOIN status_topics e ON i.status = e.id JOIN users u ON i.posted_by = c.id"},
         {"name": "action"   ,  "value": "topics" }
      )}
    });
    function clickRowHandler_topics() {
        $('#showTopics tbody tr').bind('click', function () {
            var aData = oTable_topics.fnGetData( this );
            iId_topics = aData[1];
        });
    }

5 个答案:

答案 0 :(得分:10)

要根据结果数量切换表格可见性,只需使用属性fnDrawCallback

var _grid = $("#myTable").dataTable({
    fnDrawCallback: function (settings) {
        $("#myTable").parent().toggle(settings.fnRecordsDisplay() > 0);
    }
});

答案 1 :(得分:3)

你可以这样做

$('#showTopics').dataTable( {
    "oLanguage": {
        "sEmptyTable" : "Your custom message for empty table"
    }
} );

只需添加此

即可
"oLanguage": {
    "sEmptyTable" : "Your custom message for empty table"
}

答案 2 :(得分:0)

我认为你的意思是如果你的表空了所有数据都没有显示任何数据表。这不是你可以直接在你的表init中做的事情。

您需要做的是测试来自“sAjaxSource”的输出:“server_processing.php”并查看它是否为空:

$.getJSON( "server_processing.php", function( data ) {
    if( this = "" || NULL ) {
        // add css hidden classes to all datatables elements
        $("#showTopics").addClass("hidden");
        $(".your-th-and-thead-classes").addClass("hidden");
    }
}

然后在你的CSS中可以做:

.hidden {
    display: none;
}

答案 3 :(得分:0)

DataTables提供了一个在表加载时触发的回调(例如,当服务器端调用完成时)。你可以在那里放置任意代码来修改表,无论你喜欢什么。

例如,要在加载时隐藏表:

var myTable = $("#my_table");
myTable.dataTable({

    "fnInitComplete": function(oSettings, json) {
        myTable.hide();
    }
});

答案 4 :(得分:-1)

var myTable = $("#my_table");
myTable.dataTable({
        "fnInitComplete": function(oSettings) {
           if (oSettings.aiDisplayMaster.length <= 0) {
               $("#my_table_wrapper").hide();
           }
        }
});

编辑(添加说明):根据event docsetting doc,我们看到DisplayMaster包含表格中的元素数量,并且基于HTML渲染,表格中有一个全局div,其中class = &#34;表类&#34; + _wrapper&#34;使用默认设置。所以,如果我们没有元素,我们就会隐藏这个div。

也许这不是最好的解决方案,但它起作用。