一个完整的 HTML Table 应该具有翻页、搜索、导出等功能,借助第三方库可以简化实现步骤。
Datatables 简介
官方自我介绍:
Add advanced interaction controls to your HTML tables the free & easy way
安装
在 HTML 中添加DataTables
的 js 和 css。我使用的是当前最新版本 1.10.25。
1 | <link rel="stylesheet" href="https://cdn.datatables.net/1.10.25/css/jquery.dataTables.min.css"> |
如需DataTables
提供的其他功能,请查阅:
HTML 中添加 <table>
在 HTML 中添加表格标签,并指定 id 以便后续的 JS 可以定位到它并完成表格创建。
1 | <table id="myTable"> |
两种处理模式
DataTables
有两种操作模式(serverSide='boolean'
):客户端处理(false
)和服务端处理(true
)。
- 客户端处理:适用于数据量小的场景,一次性获取所有数据,在浏览器中执行分页、过滤、排序等操作。这是默认模式。
- 服务端处理:适用于数据量大的场景,分次调用 API 获取部分数据,由服务端执行分页、过滤、排序。官方推荐数据量大于 50000 时使用该模式,但仁者见仁,个人认为这个值太高了,也许参考值可以调整到 1000。
注意:客户端模式时,除了上面描述的从服务器获取数据之外,数据源还可以直接写死在 HTML 中,也可以从本地静态文件中读取,但这些和我的应用场景不符,所有本文不会记述。
serverSide=’false’ 客户端处理
1 | <script> |
代码解读:
$("#myTable")
找到 id 是 myTable 元素serverSide: false
客户端处理模式ajax
页面加载后,自动发起 GET 请求,得到 JSON 格式的响应,从 JSON 中获取元素 data 的值作为表格数据columns
表头取自 title,而 data 对应响应 JSON 中 data 元素的属性名
以下是响应 JSON 示例:
1 | { |
serverSide=’true’ 服务端处理
1 | <script> |
代码解读:
serverSide: true
服务端处理模式ajax
页面加载后,自动发起 POST 请求,得到 JSON 格式的响应,从 JSON 中获取元素 data 的值作为表格数据pages: 3
一次获取 N 页数据(缓存),用以减少请求的次数- 实际使用中,只需要修改最后一部分的 columns 和 Ajax 的三个参数
关于 API 的 request 和 response 参数,可以查阅:https://datatables.net/manual/server-side
以下是响应 JSON 示例:
1 | { |
另外需要注意的是,此模式下 API 请求的参数是 Form Data 形式,服务端处理时不是接收 json。例如 Spring Boot 可以通过 @RequestParam
接收参数:
1 | /** |
表格的样式与功能
开启搜索与排序
1 | $("#myTable").DataTable ({ |
开启分页功能,设置分页样式
1 | $("#myTable").DataTable ({ |
开启调整每页数量
1 | $("#myTable").DataTable ({ |
开启保存状态(分页位置,每页数量,搜索,排序等)。当用户刷新浏览器时,仍使用之前的状态
1 | $("#myTable").DataTable ({ |
开启操作按钮,如,保存、导出 excel、导出 pdf、打印、调整可见列、调整每页数量
1 | $("#myTable").DataTable ({ |
最后一列显示「编辑」按钮
1 | <script> |