jQuery DataTables 專業(yè)表格插件實用教程
DataTables 是基于 jQuery 的專業(yè)表格插件,實現(xiàn)分頁、排序、搜索、篩選、樣式美化、樹形擴展(你之前學的 treeGrid),后臺管理系統(tǒng)高頻使用。
一、基礎環(huán)境 & 引入
1. 依賴順序(必須嚴格)
jQuery → DataTables CSS → DataTables JS
<!-- 1. jQuery --> <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.4/dist/jquery.min.js"></script> <!-- 2. DataTables 樣式 --> <link rel="stylesheet" rel="external nofollow" > <!-- 3. DataTables 腳本 --> <script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.min.js"></script>
2. 基礎 HTML 結構
標準表格,必須包含 <thead>(表頭)
<table id="myTable" class="display" style="width:100%">
<thead>
<tr>
<th>ID</th>
<th>姓名</th>
<th>手機號</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<!-- 數(shù)據(jù)行(靜態(tài)/動態(tài)渲染) -->
</tbody>
</table>
二、三種初始化方式(按場景選用)
方式1:靜態(tài)本地數(shù)據(jù)(data 數(shù)組)
適合少量模擬數(shù)據(jù)、測試
$(function(){
// 模擬數(shù)據(jù)
var tableData = [
{ id: 1, name: "張三", phone: "13800138000" },
{ id: 2, name: "李四", phone: "13900139000" }
];
$('#myTable').DataTable({
data: tableData,
// 列配置:綁定字段、表頭
columns: [
{ data: "id", title: "ID" },
{ data: "name", title: "姓名" },
{ data: "phone", title: "手機號" },
{ data: null, title: "操作" } // 無綁定字段,放按鈕
]
});
});
方式2:AJAX 異步加載(項目最常用)
后端接口返回 JSON 數(shù)據(jù),自動分頁/渲染
前端代碼
$('#myTable').DataTable({
// 開啟服務端分頁(大數(shù)據(jù)必開)
serverSide: true,
// 請求接口
ajax: {
url: "/api/getList",
type: "POST"
},
columns: [
{ data: "id" },
{ data: "name" },
{ data: "phone" },
// 自定義單元格:渲染按鈕、HTML
{
data: null,
render: function(row){
// row = 當前行所有字段
return `<button class="edit" data-id="${row.id}">編輯</button>
<button class="del" data-id="${row.id}">刪除</button>`;
}
}
]
});
后端返回格式(serverSide: true 固定格式)
{
"draw": 1,
"recordsTotal": 100, // 總數(shù)據(jù)條數(shù)
"recordsFiltered": 100, // 篩選后條數(shù)
"data": [
{"id":1,"name":"張三","phone":"13800138000"}
]
}方式3:渲染已有 HTML 表格
頁面已經(jīng)寫好 <tbody> 行,直接初始化即可
$('#myTable').DataTable();
三、核心常用配置(高頻參數(shù))
$('#myTable').DataTable({
// 1. 分頁相關
paging: true, // 開啟分頁(默認true)
pageLength: 10, // 每頁條數(shù)
lengthMenu: [5,10,20,50], // 每頁條數(shù)選擇器
// 2. 搜索、排序
searching: true, // 開啟全局搜索
ordering: true, // 開啟列排序
order: [[0, "desc"]],// 默認排序:第0列 倒序(desc)/正序(asc)
// 3. 語言漢化(關鍵,默認英文)
language: {
"sProcessing": "加載中...",
"sLengthMenu": "每頁 _MENU_ 條",
"sZeroRecords": "暫無數(shù)據(jù)",
"sInfo": "當前 _START_ - _END_ 條,共 _TOTAL_ 條",
"sInfoEmpty": "暫無數(shù)據(jù)",
"sSearch": "搜索:",
"oPaginate": {
"sFirst": "首頁",
"sPrevious": "上一頁",
"sNext": "下一頁",
"sLast": "末頁"
}
},
// 4. 列配置
columns: [
{ data: "id", width: "80px" }, // 設置列寬
{ data: "name", orderable: false }, // 禁止當前列排序
{ data: "phone", searchable: false } // 禁止當前列參與搜索
],
// 5. 動態(tài)樹形(結合你之前學的 treeGrid)
treeGrid: {
left: 20,
expandAll: false
}
});
四、columns.render 單元格自定義(重點)
用來拼接HTML、格式化文本、狀態(tài)轉換
1. 狀態(tài)文字轉換
{
data: "status",
render: function(val){
// val = 當前字段值
return val === 1 ? "<span style='color:green'>正常</span>"
: "<span style='color:red'>禁用</span>";
}
}2. 操作列按鈕
{
data: null,
render: function(row){
return `<button class="btn-edit" data-id="${row.id}">編輯</button>
<button class="btn-del" data-id="${row.id}">刪除</button>`;
}
}五、常用 API 方法(表格操作)
先獲取表格實例:
var table = $('#myTable').DataTable();
1. 重新加載數(shù)據(jù)(增刪改后刷新表格)
// 本地數(shù)據(jù) / 前端分頁 刷新 table.draw(); // AJAX 接口 重新請求數(shù)據(jù)(常用) table.ajax.reload();
2. 清空表格
table.clear().draw();
3. 銷毀表格(重新初始化前使用)
// 徹底銷毀實例 table.destroy();
4. 獲取當前頁數(shù)據(jù) / 整表數(shù)據(jù)
// 當前頁數(shù)據(jù) var pageData = table.rows().data();
5. 跳轉指定頁
table.page(2).draw(false); // 跳轉到第3頁(索引從0開始)
六、動態(tài)行事件綁定(結合.on()事件委托)
表格行/按鈕是動態(tài)渲染,必須用事件委托
// 委托給 table,監(jiān)聽內部 .btn-del 點擊
$('#myTable tbody').on('click', '.btn-del', function(){
// 獲取當前行 id
var id = $(this).data('id');
// 結合 swal 確認框
Swal.fire({
title: "確定刪除?",
icon: "warning",
showCancelButton: true
}).then(res => {
if(res.isConfirmed){
$.post("/api/delete", {id:id}, function(){
Swal.fire("刪除成功","","success");
table.ajax.reload(); // 刷新表格
});
}
});
});
七、搭配擴展:dataTables.treeGrid 樹形表格
整合寫法(完整可運行)
$('#myTable').DataTable({
ajax: "/api/getTreeData",
columns: [
{ defaultContent: "", width: "30px" }, // 樹形圖標列
{ data: "name", title: "名稱" },
{ data: "remark", title: "備注" }
],
// 樹形配置
treeGrid: {
left: 20,
expandAll: false
},
// 樹形表格建議關閉分頁
paging: false
});
八、常見坑 & 解決方案
表格樣式錯亂、列寬異常
- 給 table 加
style="width:100%" - 初始化放在 DOM 加載完成
$(function(){})內部
- 給 table 加
AJAX 數(shù)據(jù)渲染不出來
- 檢查接口返回字段名和
columns.data一致 serverSide: true時,后端必須返回規(guī)定格式(draw/recordsTotal/data)
- 檢查接口返回字段名和
動態(tài)按鈕點擊無反應
- 不要直接
$(".btn").click(),改用事件委托tbody.on()
- 不要直接
中文搜索亂碼/搜索無效
- 頁面編碼設為
<meta charset="UTF-8"> - 后端接口編碼統(tǒng)一 UTF-8
- 頁面編碼設為
樹形表格子節(jié)點不顯示
- 后端數(shù)據(jù)必須包含
children字段
- 后端數(shù)據(jù)必須包含
重復初始化報錯
- 重新渲染前先執(zhí)行
table.destroy()
- 重新渲染前先執(zhí)行
九、極簡總結
- 核心三要素:jQuery + 樣式CSS + JS;表格必須帶
<thead> - 兩種模式
- 前端分頁:
data: []本地數(shù)組,簡單數(shù)據(jù)用 - 服務端分頁:
serverSide:true + ajax,大數(shù)據(jù)列表必用
- 前端分頁:
- 自定義內容:靠
columns.render渲染按鈕、狀態(tài)、HTML - 動態(tài)元素:事件一律用
on()委托 - 刷新表格:增刪改后調用
table.ajax.reload() - 樹形表格:增加
treeGrid配置,數(shù)據(jù)帶children
到此這篇關于jQuery DataTables 專業(yè)表格插件實用教程的文章就介紹到這了,更多相關jQuery DataTables 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Jquery dataTables.treeGrid的樹形插件使用
- Jquery Datatables的使用詳解
- jQuery+Datatables實現(xiàn)表格批量刪除功能【推薦】
- jQuery Datatables表頭不對齊的解決辦法
- jQuery插件DataTables分頁開發(fā)心得體會
- JQuery.dataTables表格插件添加跳轉到指定頁
- jQuery中Datatables增加跳轉到指定頁功能
- jquery表格datatables實例解析 直接加載和延遲加載
- jQuery插件dataTables添加序號列的方法
- jQuery DataTables插件自定義Ajax分頁實例解析
- jQuery插件datatables使用教程
相關文章
用jQuery獲取table中行id和td值的實現(xiàn)代碼
下面小編就為大家?guī)硪黄胘Query獲取table中行id和td值的實現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05
jquery利用event.which方法獲取鍵盤輸入值的代碼
jquery利用event.which方法獲取鍵盤輸入值的代碼,需要的朋友可以參考下。2011-10-10
基于jQuery實現(xiàn)的水平和垂直居中的div窗口
在建立網(wǎng)頁布局的時候,我們經(jīng)常會面臨一個問題,就是讓一個div實現(xiàn)水平和垂直居中,雖然好幾種方式實現(xiàn),但是今天介紹時我最喜歡的方法,通過css和jQuery實現(xiàn)。2011-08-08
ajax 提交數(shù)據(jù)到后臺jsp頁面及頁面跳轉問題
這篇文章主要介紹了ajax 提交數(shù)據(jù)到后臺jsp頁面及頁面跳轉問題的相關資料,需要的朋友可以參考下2017-01-01
javascript權威指南 學習筆記之null和undefined
JavaScript中的關鍵字null是一個特殊的值,它表示“無值”。null常常被看作對象類型的一個特殊值,即代表“無對象”的值。2011-09-09

