一、常用屬性
//把公共的設置項都放在這里,就不需要每個頁面都設置一遍了,放在jQuery對象上是為了避免污染全局變量
$.dataTablesSettings = {
processing : false,//是否顯示加載中提示
bAutoWidth : false,//是否自動計算表格各列寬度
bPaginate : true,//是否顯示使用分頁
bInfo : false,//是否顯示頁數信息
sPaginationType : "full_numbers",//分頁樣式
iDisplayLength : 10,//默認每頁顯示多少條記錄
searching : false,//是否顯示搜索框
bSort : false,//是否允許排序
serverSide : true,//是否從服務器獲取數據
bStateSave : true,//頁面重載后保持當前頁
bLengthChange : false,//是否顯示每頁大小的下拉框
sServerMethod : "POST",
language: {
lengthMenu : "每頁顯示 _MENU_記錄",
zeroRecords : "沒有匹配的數據",
info : "第_PAGE_頁/共 _PAGES_頁",
infoEmpty : "沒有符合條件的記錄",
search : "查找",
infoFiltered : "(從 _MAX_條記錄中過濾)",
paginate : { "first" : "首頁 ", "last" : "末頁", "next" : "下一頁", "previous" : "上一頁"}
},
//這里是為ajax添加自定義參數,給它添加的屬性,它會傳給后台
fnServerParams : function (aoData) {
aoData._rand = Math.random();
}
};
//引用了上面的js文件后,在這里設置其他的參數
//ajax的url
$.dataTablesSettings.ajax = "/backend/content/load";
//如果表格的高度大於這個值,tbody就會出現滾動條,而表頭固定
$.dataTablesSettings.sScrollY = $(window).height() - 300;//是否開啟垂直滾動(否=disabled)
//設置具體的列名
$.dataTablesSettings.columns = [
{data : "id"},
{data : "title"},
{data : "sort"},
{data : "diffcity"},
{data : "citys"},
{data : "edittime"},
{data : "editer"}
];
//對列進行操作,這里只是替換掉第一列
$.dataTablesSettings.columnDefs = [{
targets : [0],
data : "id",
render : function(data, type, row) {
return "<a title='編輯' class='glyphicon glyphicon-edit nounderline' href='javascript:editTabRow(" + data + ");'></a> " +
"<a title='復制' class='glyphicon glyphicon-duplicate nounderline' href='javascript:copyTabRow(" + data + ");'></a> " +
"<a title='刪除' class='glyphicon glyphicon-trash nounderline' href='javascript:deleteTabRow(" + data + ");'></a>";
}
}];
二、事件
$.dataTablesSettings.fnDrawCallback = function(data){
//每一次表格繪制完成時調用
};
$.dataTablesSettings.fnInitComplete = function(){
//表格初始化時調用一次
};
//還有其他不常用的,就不列舉了
三、方法
//重繪方法。true會回到表格的初始狀態,例如回到第一頁,false只是重新加載當前頁
dataTable.fnDraw(false);
//銷毀方法。true會刪除表格元素,而false不會,它只是銷毀dataTable對象
dataTable.fnDestroy(false);
//換頁方法,可以跳轉到指定頁。可選參數有"first", "previous", "next" , "last",或者是一個整數,0是第一頁
dataTable.fnPageChange(0);
四、搜索案例
//這里是搜索的案例,不過自定義分頁也可以這么做
$("#searchBtn").on("click", function(){
//這里是為了解決搜索條件變化后,沒有點搜索按鈕,而是點換頁后搜索條件也變化的bug
var stitle = $("#stitle").val();
var sdiffcity = $("#sdiffcity").val();
var scity = $("#scity").val();
//這里重新設置參數
$.dataTablesSettings.fnServerParams = function (aoData) {
aoData.stitle = stitle;
aoData.sdiffcity = sdiffcity;
aoData.scity = scity;
aoData._rand = Math.random();
}
//搜索就是設置參數,然后銷毀datatable重新再建一個
dataTable.fnDestroy(false);
dataTable = $("#datatable").dataTable($.dataTablesSettings);
//搜索后跳轉到第一頁
dataTable.fnPageChange(0);
});
五、注意事項
//當window尺寸改變時觸發,以解決dataTable表頭不自動適應的問題
//resize和scroll事件一定要優化
$.resizeWaiter = false;
$(window).resize(function() {
if(!$.resizeWaiter){
$.resizeWaiter = true;
setTimeout(function(){
$.dataTable && $.dataTable.fnDraw(false);
$.resizeWaiter = false;
}, 500);
}
});
//在刪除的ajax的success方法里需要這么寫,如果當前頁只有一條數據,刪除后跳轉到前一頁
start = $("#datatable").dataTable().fnSettings()._iDisplayStart;
total = $("#datatable").dataTable().fnSettings().fnRecordsDisplay();
dataTable.fnDraw(false);
if ((total - start) == 1) {
if (start > 0) {
$("#datatable").dataTable().fnPageChange("previous", true);
}
}