JavaScript 实现服务端分页逻辑的类封装
本文介绍一个基于 JavaScript 的分页类封装,通过构造函数接收总条数、每页显示条数、当前页码及 URL 模板等参数。核心方法 generate 负责计算页码范围,动态生成包含下拉选择框与导航链接的 HTML 表格,并利用正则表达式替换 URL 中的占位符以实现页面跳转。
JavaScript 分页类封装与实现
/** * 分页类构造 * 参数 nTotalList: 总条数 * 参数 nPageSize: 每页显示条数 * 参数 nPageNum: 当前页码 * 参数 sPageUrl: 分页链接的URL,页码以[pn]代替,输出时将被替换为实际页码 * 参数 nPageListSize: 页码列表(下拉框)中显示的最多页码条数。该参数可省略,默认100 */ function Pagination(nTotalList, nPageSize, nPageNum, sPageUrl, nPageListSize) { this.totalList = nTotalList; this.pageSize = nPageSize; this.pageNum = nPageNum; if (nTotalList == 0) this.totalPages = 1; else this.totalPages = Math.floor((this.totalList-1)/this.pageSize + 1); this.pageUrl = sPageUrl; if (arguments[4]) this.pageListSize = nPageListSize; else this.pageListSize = 100; } /** * 生成分页,将HTML直接输出 * 无参数 * 无返回值 */ Pagination.prototype.generate = function() { var output = ""; output += "<table width=\"98%\" cellspacing=\"1\" cellpadding=\"3\" align=\"center\"><tr><td align=\"right\">"; output += "共 " + this.totalList + " 条 每页 " + this.pageSize + " 条 当前第 "; output += "<select onchange=\"if(this.value)location.href='" + this.pageUrl + "'.replace(/\\[pn\\]/,"; output += "this.value);\" align=\"absMiddle\" style=\"font:normal 9px Verdana,Arial,宋体;\">"; var firstPage = this.pageNum - Math.floor(this.pageListSize/2); if (firstPage < 1) firstPage = 1; var lastPage = firstPage + this.pageListSize - 1; if (lastPage > this.totalPages) { lastPage = this.totalPages; firstPage = lastPage - this.pageListSize + 1; if (firstPage < 1) firstPage = 1; } if (firstPage > 1) { output += "<option value=\"1\">1</option>"; if (firstPage > 2) output += "<option value=\"\">…</option>"; } for (var p = firstPage; p <= lastPage; p++) { output += "<option value=\"" + p + "\""; if (p == this.pageNum) output += " selected=\"yes\""; output += ">" + p + "</option>"; } if (lastPage < this.totalPages) { if (lastPage < this.totalPages - 1) output += "<option value=\"\">…</option>"; output += "<option value=\"" + this.totalPages + "\">" + this.totalPages + "</option>"; } if (this.pageNum > this.totalPages) output += "<option value=\"\" selected=\"yes\">页码超出范围</option>"; output += "</select>"; output += "/" + this.totalPages + " 页 "; if (this.pageNum == 1) { output += "[首页] "; output += "[上页] "; } else { output += "<a href=\"" + this.pageUrl.replace(/\[pn\]/, "1") + "\">[首页]</a> "; output += "<a href=\"" + this.pageUrl.replace(/\[pn\]/, this.pageNum-1) + "\">[上页]</a> "; } if (this.pageNum == this.totalPages) { output += "[下页] "; output += "[尾页]"; } else { output += "<a href=\"" + this.pageUrl.replace(/\[pn\]/, this.pageNum+1) + "\">[下页]</a> "; output += "<a href=\"" + this.pageUrl.replace(/\[pn\]/, this.totalPages) + "\">[尾页]</a> "; } output += "</td></tr></table>"; document.writeln(output); }
anime.js 快速入门:怎么引入库并编写第一个 DOM 动画
2026-11-05 14:22:43
在线JS解密后变量名仍乱码?结合浏览器DevTools调试还原
2026-11-04 20:26:01
怎么在浏览器中运行JavaScript代码并查看输出结果
2026-11-04 09:07:33
JS 获取屏幕分辨率:window.screen.width 与 height 用法
2026-11-04 08:52:48
为什么推荐用DOMContentLoaded代替window.onload初始化JS
2026-11-04 08:42:33
