我正在使用带有服务器端获取数据的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];
});
}
答案 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 doc和setting doc,我们看到DisplayMaster包含表格中的元素数量,并且基于HTML渲染,表格中有一个全局div,其中class = &#34;表类&#34; + _wrapper&#34;使用默认设置。所以,如果我们没有元素,我们就会隐藏这个div。
也许这不是最好的解决方案,但它起作用。