上一篇
HTML表格翻页需结合JavaScript或服务端技术实现,前端通过JS监听分页按钮事件,动态切换显示的数据行;服务端则根据页码参数返回对应数据片段,常用方法包括隐藏非当前页行、使用AJAX异步加载新数据或借助分页插件简化开发。
纯前端分页(适合数据量小)
原理:一次性加载所有数据,通过JavaScript控制每页显示条目
<div>
<table id="dataTable">
<thead><tr><th>ID</th><th>姓名</th><th>年龄</th></tr></thead>
<tbody><!-- 数据由JS填充 --></tbody>
</table>
<div id="pagination">
<button onclick="changePage(-1)">上一页</button>
<span id="pageNum">1/5</span>
<button onclick="changePage(1)">下一页</button>
</div>
</div>
<script>
const allData = []; // 假设已从API获取数据
let currentPage = 1;
const perPage = 10;
function renderTable() {
const start = (currentPage-1) * perPage;
const pageData = allData.slice(start, start + perPage);
let html = '';
pageData.forEach(item => {
html += `<tr><td>${item.id}</td><td>${item.name}</td><td>${item.age}</td></tr>`;
});
document.querySelector('#dataTable tbody').innerHTML = html;
document.getElementById('pageNum').textContent = `${currentPage}/${Math.ceil(allData.length/perPage)}`;
}
function changePage(step) {
const totalPage = Math.ceil(allData.length/perPage);
if(currentPage + step > 0 && currentPage + step <= totalPage) {
currentPage += step;
renderTable();
}
}
// 初始化
renderTable();
</script>
后端分页(适合大数据量)
原理:每次翻页时向服务器请求新数据

<!-- HTML结构同上,省略table代码 -->
<script>
async function loadPage(page) {
const response = await fetch(`/api/data?page=${page}&size=10`);
const { data, total } = await response.json();
// 渲染表格数据
let html = '';
data.forEach(item => { /* 生成行数据 */ });
document.querySelector('tbody').innerHTML = html;
// 生成分页按钮
const pageCount = Math.ceil(total/10);
let paginationHtml = '';
for(let i=1; i<=pageCount; i++) {
paginationHtml += `<button class="${i===page?'active':''}" onclick="loadPage(${i})">${i}</button>`;
}
document.getElementById('pagination').innerHTML = paginationHtml;
}
// 初始加载第一页
loadPage(1);
</script>
后端示例(Node.js + Express):
app.get('/api/data', (req, res) => {
const page = parseInt(req.query.page) || 1;
const size = parseInt(req.query.size) || 10;
const offset = (page-1)*size;
// 数据库查询
db.query('SELECT * FROM users LIMIT ? OFFSET ?', [size, offset], (err, data) => {
db.query('SELECT COUNT(*) AS total FROM users', (err, countResult) => {
res.json({
data,
total: countResult[0].total
});
});
});
});
使用现成库(推荐方案)
-
DataTables:

<link rel="stylesheet" href="https://cdn.datatables.net/1.13.4/css/jquery.dataTables.css"> <script src="https://cdn.datatables.net/1.13.4/js/jquery.dataTables.js"></script> <table id="myTable" class="display"> <thead><tr><th>列1</th><th>列2</th></tr></thead> </table> <script> $(document).ready(() => { $('#myTable').DataTable({ ajax: '/api/data', // 数据接口 serverSide: true, // 启用后端分页 pageLength: 25 // 每页条目 }); }); </script> -
Pagination.js:
轻量级分页库,GitHub星标超8K,支持动态数据绑定。
关键注意事项
- 性能选择:
- ≤500条数据:纯前端方案
-
500条数据:后端分页
- 用户体验优化:
- 添加页面跳转输入框
- 显示总页数及当前页码
- 数据加载时添加loading动画
- SEO友好:
- 重要数据首次加载时直接渲染在HTML中
- 避免完全依赖JavaScript生成内容
总结建议
| 场景 | 推荐方案 | 优势 |
|---|---|---|
| 管理后台 | DataTables | 功能全面,支持排序/搜索 |
| 静态数据 | 纯前端分页 | 无服务器依赖 |
| 海量数据 | 后端分页 | 最优性能 |
引用说明:本文代码示例基于MDN Web文档标准语法,DataTables引用自datatables.net,数据库操作采用MySQL语法规范,实际开发请根据项目框架调整实现细节。

