最近开发项目用到了jquery datatable 这个插件,感觉还是很好用的,今天写了一个表格的完整功能,贴上来,以供参考,html,和后台部分的内容就不贴了,只贴js部分
/*
* 调用搜索,搜索参数在fnServerParams中定义
*/
$("#submitSearch").click( function () {
oTable.fnFilter();
} );
/*
* 初始化表格参数
*/
var oTable = $('#messageList').dataTable( {
"bProcessing" : false, //DataTables载入数据时,是否显示‘进度’提示
"bServerSide" : true, //是否启动服务器端数据导入
//"aLengthMenu" : [10, 20, 50], //更改显示记录数选项
"iDisplayLength" : 10, //默认显示的记录数
"bPaginate" : true, //是否显示(应用)分页器
"bInfo" : true, //是否显示页脚信息,DataTables插件左下角显示记录数
"bSort" : true, //是否启动各个字段的排序功能
"sDom": "t<'row-fluid'<'span6'i><'span6'p>>",//定义表格的显示方式
"sPaginationType": "bootstrap",
"aaSorting" : [[0, "desc"]], //默认的排序方式,第0列,降序排列
"bFilter" : true, //是否启动过滤、搜索功能
"aoColumns" : [{
"mData" : "id", //列标识,和服务器返回数据中的属性名称对应
"sTitle" : "",//列标题
"sDefaultContent" : "", //此列默认值为"",以防数据中没有此值,DataTables加载数据的时候报错
"bVisible" : false //此列不显示
//"sClass" : "hidden"//定义列的class参数,隐藏列也可以通过这种方式设置
}, {
"mData" : "fromUser",
"sTitle" : "发送人",
"sWidth":"10%",//定义列宽度,以百分比表示
"sDefaultContent" : "",
}, {
"mData" : "toUser",
"sTitle" : "接收人",
"sDefaultContent" : "",
}, {
"mData" : "messaeg_content",
"sTitle" : "消息内容",
"sDefaultContent" : "",
"bSortable":false //此列不需要排序
}, {
"mData" : "",
"sTitle" : "操作",
"sDefaultContent" : "",
}],
"oLanguage": { //国际化配置
"sProcessing" : "正在获取数据,请稍后...",
"sLengthMenu" : "显示 _MENU_ 条",
"sZeroRecords" : "没有您要搜索的内容",
"sInfo" : "从 _START_ 到 _END_ 条记录 总显示记录数为 _TOTAL_ 条",
"sInfoEmpty" : "记录数为0",
"sInfoFiltered" : "(共显示 _MAX_ 条数据)",
"sInfoPostFix" : "",
"oPaginate": {
"sFirst" : "第一页",
"sPrevious" : "上一页",
"sNext" : "下一页",
"sLast" : "最后一页"
}
},
/*
* 修改状态值
*/
"fnRowCallback" : function(nRow, aData, iDisplayIndex) {
if (aData.response_type == 'video')
$('td:eq(1)', nRow).html('视频回复');
return nRow;
},
/*
* 向服务器传递的参数
*/
"fnServerParams": function ( aoData ) {
aoData.push(
{ "name": "keyword", "value": $("#search-keyword").val() },
{ "name": "responseType", "value": $("#search-responseType").val() }
);
},
//请求url
"sAjaxSource" : basePath+"getCustomResponsePageMessage/"+$("#secret").val(),
//服务器端,数据回调处理
"fnServerData" : function(sSource, aDataSet, fnCallback) {
$.ajax({
"dataType" : 'json',
"type" : "post",
"url" : sSource,
"data" : aDataSet,
"success" : function(resp){
fnCallback(resp);
}
});
}
});
以下是服务器返回的参数
{
"iTotalRecords": 10,//本次加载记录数量
"iTotalDisplayRecords": 57,//总记录数量
"aaData": [
{
"id": "1",
"fromUser": "tom",
"toUser": "jack",
"content": "hello"
},
{
"id": "2",
"fromUser": "jack",
"toUser": "tom",
"content": "how are you"
}, ... ]}
需要注意的是,datatable的fnFilter有自带的搜索实现,但是它传递到后台的参数识别起来比较麻烦,所以修改了搜索的实现通过fnServerParams向后台传递搜索参数。