原生JavaScript实现HTML表格分页效果

温以宁
温以宁
发布时间:2026-10-14| 5人浏览过
原创

本文介绍了如何利用原生JavaScript实现网页中HTML表格的客户端分页功能,涵盖核心算法逻辑、DOM控制方法及完整的交互代码示例。

实现思路与核心参数

在不依赖后端API的情况下,对现有HTML表格进行分页的核心在于“显示控制”。其基本逻辑是:首先计算总页数,然后根据当前页码确定该页应展示的记录范围(起始行与结束行),最后通过修改对应

标签的CSS样式(如设置display为none或block)来隐藏其他行。

实现此功能主要依赖以下几个关键变量的定义:

  • record:每页需要显示的记录条数,决定分页的频率。
  • count:表格中的总记录数量,用于初始化分页系统。
  • pageTotal:根据总数与每页记录数自动计算出的总页数。
  • pagenum:当前正在查看的页码序号。

基础数据结构与工具函数

为了让体验更友好,通常会引入简单的Cookie读取机制以保存用户浏览到的页码,防止刷新页面后回到第一页。同时,扩展字符串方法以实现简易的参数替换功能。

<script type="text/javascript">
var record = 4; // 每页显示多少条记录
var count = 24; // 记录总数
var pageTotal = ((count+record-1)/record)|0; // 计算总页数(向上取整)
var pagenum = 1; // 将要显示的页码

// 简化的Cookie操作对象
Cookie = {
    Set : function (){
        var name = arguments[0], value = escape(arguments[1]), days = 365, path = "/";
        if(arguments.length > 2) days = arguments[2];
        if(arguments.length > 3) path = arguments[3];
        with(new Date()){setDate(getDate()+days);days=toUTCString();}
        document.cookie = "{0}={1};expires={2};path={3}".format(name, value, days, path);
    },
    Get : function (){
        var returnValue=document.cookie.match(new RegExp("[\b^;]?" + arguments[0] + "=([^;]*)(?=;|\b|$)","i"));
        return returnValue?unescape(returnValue[1]):returnValue;
    }
}

// 字符串格式化辅助函数
String.prototype.format = function(){
    var tmpStr = this;
    var iLen = arguments.length;
    for(var i=0;i<iLen;i++){
        tmpStr = tmpStr.replace(new RegExp("\\{" + i + "\\}", "g"), arguments[i]);
    }
    return tmpStr;
}
</script>

分页控制与显示逻辑

核心的控制函数负责根据pagenum的状态来计算当前页的数据区间,并遍历表格执行显隐操作。同时,它还需要智能更新底部导航栏的状态(例如当在第一页时,“第一页”和“上一页”按钮应当变为普通文本且不可点击)。

第1步:初始化页码与坐标校准

在页面加载时,首先尝试从Cookie中获取上次的浏览记录。若不存在或数值异常,则重置为第一页。随后检查页码是否越界,确保不超过pageTotal且不小于1。

// 读取并初始化页码
pagenum = Cookie.Get("pagenum");
if(pagenum=="" || pagenum<1){ pagenum=1; }

// 越界修正函数
function coordinatePagenum(num){
    if(num<1){ num="1"; }
    else if(num>pageTotal){ num=pageTotal; }
}

第2步:渲染页面内容与更新控件状态

执行此步骤将重绘表格的行可见性,并生成对应的超链接代码块供后续渲染使用。

function showhiddenRecord(pagenum){
    // 更新当前页码显示元素
    number.innerHTML=pagenum;
    
    // 动态构建导航栏链接:首项/前项处理
    if(pagenum<=1){
        theFirstPage.innerHTML="第一页";
        thePrePage.innerHTML="上一页";
    }else{
        theFirstPage.innerHTML="<a href='javascript:firstPage()'>第一页</a>";
        thePrePage.innerHTML="<a href='javascript:prePage()'>上一页</a>";
    }
    
    // 动态构建导航栏链接:末项/后项处理
    if(pagenum>=pageTotal){
        theNextPage.innerHTML="下一页";
        theLastPage.innerHTML="最后一页";
    }else{
        theNextPage.innerHTML="<a href='javascript:nextPage()'>下一页</a>";
        theLastPage.innerHTML="<a href='javascript:lastPage()'>最后一页</a>";
    }
    
    // 同步下拉框状态(如有)
    document.getElementById('goto').value=pagenum;
    
    // 计算本段显示的首尾记录索引(基于1的序号)
    pageBegin = (record*(pagenum-1)+1)|0;
    pageEnd = record*pagenum;
    
    // 核心:遍历表格行,应用显示控制
    for(var i=1;i<=count;i++){
        if(i>=pageBegin && i<=pageEnd){
            mytable.rows[i].style.display="";  // 显示符合条件的行
        }else{
            mytable.rows[i].style.display="none"; // 隐藏不符合条件的行
        }
    }
    
    // 保存最新页码到存储介质
    Cookie.Set("pagenum", pagenum);
}

第3步:封装分页动作函数

将常见的翻页动作(前一页、后一页、首页、末页、跳转页)分别封装为独立函数,并在触发时调用核心更新函数。

function firstPage(){ pagenum=1; showhiddenRecord(pagenum); }
function lastPage(){ showhiddenRecord(pageTotal); }
function prePage() { pagenum--; coordinatePagenum(pagenum); showhiddenRecord(pagenum); }
function nextPage() { pagenum++; coordinatePagenum(pagenum); showhiddenRecord(pagenum); }

// 跳转到指定页(通常由下拉框触发)
function gotoPage(num){
    coordinatePagenum(pagenum); // 注意此处原逻辑似乎未更新pagenum变量导致bug,标准做法应为 pagenum=num; 随后再校验
    // 修正逻辑建议:
    pagenum = num;
    coordinatePagenum(pagenum);
    showhiddenRecord(pagenum);
}

HTML结构与界面集成

在页面结构中,我们需要预留出用于放置导航按钮的容器,以及承载数据的<table>表格。注意:为了方便脚本直接定位,表格必须赋予ID属性(如mytable),且导航区域需预留对应ID以便注入内容。

<body onLoad="showhiddenRecord(pagenum)">
<center>
    共  页 当前第 <span id="number">1</span> 页
    <span id="theFirstPage"></span>
    <span id="thePrePage"></span>
    <span id="theNextPage"></span>
    <span id="theLastPage"></span>
    转到第
    <select onChange="gotoPage(this.value)" name="goto">
        
        <option value=1>1</option>
        <option value=2>2</option>
        <option value=3>3</option>
        <option value=4>4</option>
        <option value=5>5</option>
        <option value=6>6</option>
    </select>页
</center>

<TABLE id="mytable" cellpadding=4 cellspacing=1 border=0 bgcolor=#999999 width=500 align=center>
    <TR bgcolor=#ffffff><TD>标题</TD></TR>
    <!-- 数据行占位 -->
    <TR bgcolor=#ffffff><TD>1</TD></TR>
    ... (此处省略中间多行相同结构数据) ...
    <TR bgcolor=#ffffff><TD>24</TD></TR>
</TABLE>
</body>

注意事项与维护

上述方案适用于数据量较小、纯前端渲染的环境。在实际企业级开发中需注意以下几点:
1. 性能损耗:由于表格的所有行都必须在DOM中存在然后被隐藏,如果数据达到数千甚至上万条,会造成极大的内存开销和渲染卡顿。大流量场景必须改为服务端分页(只请求当前页数据)。
2. 硬编码风险:原文HTML中对“下一页/首页”的判断是直接拼接字符串,这在现代框架中建议使用绑定事件而非内联JS。
3. 脚本纠错:原文提供的gotoPage函数存在逻辑瑕疵,未正确将传入参数赋值给全局pagenum变量即进行状态同步,实际部署时已做说明修正。

以上就是原生JavaScript实现表格翻页效果的详细内容,更多关于JavaScript前端开发教程的资料请关注本站其它相关文章!
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。