讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

updream

一键生成高质量推广成片

AniShort
AniShort

AI短剧协同制作平台

剧云
剧云

中文短剧剧本制作平台

单按钮控制动态表格行展开与折叠教程:基于jQuery的优化实现

千瑶吖_5153

千瑶吖_5153

发布时间:2025-09-13 09:44:15

|

670人浏览过

|

来源于php中文网

原创

单按钮控制动态表格行展开与折叠教程:基于jQuery的优化实现

本教程详细介绍了如何利用jQuery实现动态生成表格行的显示与隐藏功能。通过一个单一按钮,用户可以轻松地在默认显示少量行和显示所有行之间进行切换,并动态更新按钮文本,优化了用户体验和代码效率,避免了冗余的JavaScript代码和服务器负担。

引言

在网页开发中,尤其是在展示大量数据时,为了提升用户体验和页面加载性能,常常需要对动态生成的表格行进行管理。一个常见的需求是:默认只显示表格的前几行,而将其余行隐藏起来。用户可以通过点击一个按钮来“显示更多”隐藏的行,并在显示所有行后,该按钮又变为“显示更少”,以便将表格恢复到初始状态。

传统的实现方式可能涉及为每个需要隐藏的行手动指定ID,并通过多个JavaScript函数(如show()和hide())来分别控制这些行的显示与隐藏,这种方法不仅代码冗余、难以维护,而且随着表格行数的增加,维护成本会急剧上升。本教程将介绍一种更优雅、高效的解决方案,利用jQuery的强大选择器和事件处理能力,通过一个单一按钮实现这一功能。

核心概念:jQuery :gt() 选择器

jQuery的:gt(index)选择器是一个非常强大的工具,它允许我们选择所有索引(从0开始计数)大于给定index的元素。在表格行(

)的场景中,如果我们希望隐藏从第四行开始的所有行,由于索引从0开始,那么前三行的索引分别是0、1、2。因此,我们需要选择索引大于2的行,即tr:gt(2)。

使用:gt()选择器的好处是,无论表格有多少行,我们都不需要关心具体的ID或数量,只需要指定一个阈值即可。这大大简化了代码,并提高了其可维护性和灵活性。

javascript-typescript-typescript-scaffold
javascript-typescript-typescript-scaffold

你是 TypeScript 项目架构专家,专注于脚手架搭建生产就绪的 Node.js 和前端应用。生成包含现代工具链(pnpm、Vite、Next.js)、类型

下载

HTML 结构调整

为了实现单一按钮的切换功能,我们需要对HTML结构进行简化。将原有的“Show All”和“Show Less”两个按钮合并为一个,并为其添加一个唯一的ID,以便通过JavaScript进行事件绑定和内容更新。

<!-- 假设这是您的表格部分 -->
<table width="100%" cellspacing="10" cellpadding="10" class="tablec">
    <thead>
        <tr> 
            <th><strong>Floor Plan</strong></th>
            <th><strong>Dimension</strong></th>
            <th><strong>Price</strong></th>
        </tr>
    </thead>
    <tbody>
        <!-- PHP 动态生成的前3行,这些行默认可见 -->
        <tr id="row-1" class="table-row"><td>内容1</td><td>尺寸1</td><td>价格1</td></tr>
        <tr id="row-2" class="table-row"><td>内容2</td><td>尺寸2</td><td>价格2</td></tr>
        <tr id="row-3" class="table-row"><td>内容3</td><td>尺寸3</td><td>价格3</td></tr>
        <!-- PHP 动态生成的第4行及之后,这些行将被控制显示/隐藏 -->
        <tr id="row-4" class="table-row"><td>内容4</td><td>尺寸4</td><td>价格4</td></tr>
        <tr id="row-5" class="table-row"><td>内容5</td><td>尺寸5</td><td>价格5</td></tr>
        <!-- ... 更多动态生成的表格行 ... -->
    </tbody>
</table>
<br>
<div class="wrapperr">
    <!-- 合并为一个按钮,并添加ID -->
    <button class="btn btn-primary" id="toggleRowsBtn">显示更多 <i class="fa fa-arrow-down" style="font-size:14px"></i></button>
</div>

说明:

  • 为了确保选择器的准确性,我们为添加了class="tablec",并为所有添加了class="table-row"。
  • 按钮的初始文本设置为“显示更多”,因为默认状态下会有行被隐藏。
  • JavaScript/jQuery 实现

    现在,我们将使用jQuery来编写逻辑,实现表格行的显示/隐藏切换。

    1. 引入 jQuery 库: 确保在您的脚本运行之前,页面中已经引入了jQuery库。您可以从CDN引入,例如:

      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    2. 编写切换逻辑: 我们将使用一个布尔变量isShown来跟踪当前表格行的显示状态(true表示所有行都已显示,false表示只有默认行可见)。

    <script>
        // 确保DOM加载完成后再执行脚本
        jQuery(document).ready(function($) {
            var isShown = false; // 初始状态为“未显示所有”,即只显示了默认的前3行
    
            // 页面加载时,隐藏所有表格中索引大于2的行(即第4行及之后的所有行)
            // 这里的选择器是针对 class 为 tablec 的表格内的 tbody 里的 tr 元素
            $("table.tablec tbody tr:gt(2)").hide();
    
            // 为按钮绑定点击事件
            $("#toggleRowsBtn").on("click", function() {
                if (isShown) {
                    // 当前是“显示所有”状态,点击后应“显示更少”
                    $("table.tablec tbody tr:gt(2)").hide(); // 隐藏第4行及之后的所有行
                    // 更新按钮文本和图标
                    $(this).html('显示更多 <i class="fa fa-arrow-down" style="font-size:14px"></i>');
                    isShown = false; // 更新状态为“未显示所有”
                } else {
                    // 当前是“显示更少”状态,点击后应“显示所有”
                    $("table.tablec tbody tr:gt(2)").show(); // 显示第4行及之后的所有行
                    // 更新按钮文本和图标
                    $(this).html('显示更少 <i class="fa fa-arrow-up" style="font-size:14px"></i>');
                    isShown = true; // 更新状态为“已显示所有”
                }
            });
        });
    </script>

    完整示例代码

    结合HTML和JavaScript,完整的实现如下:

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>动态表格行显示/隐藏</title>
        <!-- 引入Font Awesome图标库,如果需要显示图标 -->
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
        <style>
            /* 示例样式,可根据您的项目调整 */
            body { font-family: Arial, sans-serif; margin: 20px; }
            table { width: 80%; border-collapse: collapse; margin-bottom: 20px; }
            th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
            th { background-color: #f2f2f2; }
            .btn {
                background-color: #007bff;
                color: white;
                padding: 10px 15px;
                border: none;
                cursor: pointer;
                font-size: 16px;
                border-radius: 5px;
            }
            .btn:hover {
                background-color: #0056b3;
            }
            .wrapperr {
                text-align: center;
                margin-top: 10px;
            }
        </style>
    </head>
    <body>
    
        <div class="container">
            <h2>楼层平面图列表</h2>
            <table width="100%" cellspacing="10" cellpadding="10" class="tablec">
                <thead>
                    <tr> 
                        <th><strong>平面图</strong></th>
                        <th><strong>尺寸</strong></th>
                        <th><strong>价格</strong></th>
                    </tr>
                </thead>
                <tbody>
                    <!-- 模拟PHP动态生成的前3行 -->
                    <tr id="row-1" class="table-row"><td><img src="https://via.placeholder.com/100x100?text=Plan1" alt="Plan 1"></td><td>客厅 10x12ft<br><b>120 Sqft</b></td><td><button class="btn btn-primary">获取报价</button></td></tr>
                    <tr id="row-2" class="table-row"><td><img src="https://via.placeholder.com/100x100?text=Plan2" alt="Plan 2"></td><td>卧室 11x13ft<br><b>143 Sqft</b></td><td><button class="btn btn-primary">获取报价</button></td></tr>
                    <tr id="row-3" class="table-row"><td><img src="https://via.placeholder.com/100x100?text=Plan3" alt="Plan 3"></td><td>厨房 8x10ft<br><b>80 Sqft</b></td><td><button class="btn btn-primary">获取报价</button></td></tr>
    
                    <!-- 模拟PHP动态生成的第4行及之后,这些行将被控制 -->
                    <tr id="row-4" class="table-row"><td><img src="https://via.placeholder.com/100x100?text=Plan4" alt="Plan 4"></td><td>书房 9x9ft<br><b>81 Sqft</b></td><td><button class="btn btn-primary">获取报价</button></td></tr>
                    <tr id="row-5" class="table-row"><td><img src="https://via.placeholder.com/100x100?text=Plan5" alt="Plan 5"></td><td>阳台 5x10ft<br><b>50 Sqft</b></td><td><button class="btn btn-primary">获取报价</button></td></tr>
                    <tr id="row-6" class="table-row"><td><img src="https://via.placeholder.com/100x100?text=Plan6" alt="Plan 6"></td><td>储藏室 6x6ft<br><b>36 Sqft</b></td><td><button class="btn btn-primary">获取报价</button></td></tr>
                    <tr id="row-7" class="table-row"><td><img src="https://via.placeholder.com/100x100?text=Plan7" alt="Plan 7"></td><td>花园 20x15ft<br><b>300 Sqft</b></td><td><button class="btn btn-primary">获取报价</button></td></tr>
                    <tr id="row-8" class="table-row"><td><img src="https://via.placeholder.com/100x100?text=Plan8" alt="Plan 8"></td><td>车库 12x20ft<br><b>240 Sqft</b></td><td><button class="btn btn-primary">获取报价</button></td></tr>
                </tbody>
            </table> 
            <div class="wrapperr">
                <button class="btn btn-primary" id="toggleRowsBtn">显示更多 <i class="fa fa-arrow-down" style="font-size:14px"></i></button>
            </div>
        </div>
    
        <!-- 引入jQuery库 -->
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
        <script>
            jQuery(document).ready(function($) {
                var isShown = false; // 初始状态为“未显示所有”
    
                // 页面加载时隐藏第4行及之后的所有行
                // :gt(2) 表示索引大于2的行,即第3行之后(从0开始计数)
                $("table.tablec tbody tr:gt(2)").hide();
    
                // 为按钮绑定点击事件
                $("#toggleRowsBtn").on("click", function() {
                    if (isShown) {
                        // 当前是“显示所有”状态,点击后应“显示更少”
                        $("table.tablec tbody tr:gt(2)").hide();
                        $(this).html('显示更多 <i class="fa fa-arrow-down" style="font-size:14px"></i>');
                        isShown = false;
                    } else {
                        // 当前是“显示更少”状态,点击后应“显示所有”
                        $("table.tablec tbody tr:gt(2)").show();
                        $(this).html('显示更少 <i class="fa fa-arrow-up" style="font-size:14px"></i>');
                        isShown = true;
                    }
                });
            });
        </script>
    
    </body>
    </html>

    注意事项

    • jQuery 引入: 确保您的页面在执行上述JavaScript代码之前已经正确引入了jQuery库。如果未引入,代码将无法正常工作。
    • 选择器精度: 如果您的页面中有多个表格,请使用更具体的jQuery选择器(例如$("#yourTableId tbody tr:gt(2)") 或 $("table.yourClass tbody tr:gt(2)"))来确保只操作目标表格,避免意外影响其他元素。
    • 初始状态: 务必在$(document).ready()中设置初始的隐藏状态和按钮文本,以保证页面加载时的正确显示。
    • 可访问性: 为了提高可访问性,可以考虑为切换按钮添加aria-expanded属性,并在切换状态时更新其值。例如,当显示所有行时,aria-expanded="true";当隐藏行时,aria-expanded="false"。
    • 性能考量: 这种客户端解决方案完全避免了服务器端脚本的重复执行,大大减轻了服务器负担。然而,如果表格包含成千上万行数据,前端操作仍然可能导致短暂的性能延迟。对于极端大量的数据,可以考虑采用前端分页、虚拟滚动或无限滚动等更高级的优化策略。

    总结

    通过本教程,我们学习了如何利用jQuery的:gt()选择器和简单的JavaScript逻辑,实现一个高效且用户友好的动态表格行显示/隐藏切换功能。这种方法不仅显著减少了代码量和维护成本,而且通过一个单一的按钮提供了直观的操作体验。它避免了手动管理大量元素ID的繁琐,是处理类似动态内容展示需求的推荐实践。

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

621

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1256

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2362

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

2168

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

513

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

337

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

906

2024.02.23

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

309

2026.01.13

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

0

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn