0

0

使用 jQuery 实现 HTML 表格动态筛选功能教程

碧海醫心

碧海醫心

发布时间:2025-10-12 13:02:37

|

351人浏览过

|

来源于php中文网

原创

使用 jquery 实现 html 表格动态筛选功能教程

本教程将详细指导如何利用 jQuery 为 HTML 表格添加动态筛选功能。我们将探讨常见的实现误区,如选择器使用不当,并提供一个结构清晰、易于理解的解决方案。通过本文,您将掌握使用 `keyup` 事件监听用户输入,结合 `filter` 和 `toggle` 方法实现表格行的实时内容匹配与显示控制,从而提升用户与表格数据的交互体验。

引言:动态表格筛选的重要性

在现代Web应用中,表格是展示大量结构化数据的重要方式。当数据量庞大时,用户往往难以快速定位所需信息。此时,为表格添加动态筛选功能变得尤为重要。通过一个简单的搜索框,用户可以实时过滤表格内容,极大地提升了数据检索的效率和用户体验。本教程将聚焦于如何使用强大的JavaScript库jQuery来实现这一功能。

核心原理:jQuery 动态筛选机制

实现表格动态筛选主要依赖于以下几个jQuery核心方法和概念:

  1. 事件监听 (.on("keyup", function(){...})): 当用户在搜索框中输入或删除字符时,keyup 事件会被触发。我们在此事件处理函数中执行筛选逻辑。
  2. 获取输入值 (.val().toLowerCase()): 获取搜索框中的当前文本内容,并将其转换为小写,以实现不区分大小写的搜索。
  3. 元素筛选 (.filter(function(){...})): 遍历表格中的每一行(或单元格),并根据回调函数的返回值来决定是否保留该元素。
  4. 内容匹配 (.text().toLowerCase().indexOf(value) > -1): 在 filter 的回调函数中,获取当前元素的文本内容,同样转换为小写,然后检查它是否包含搜索值。indexOf() 方法返回子字符串首次出现的索引,如果未找到则返回 -1。
  5. 显示/隐藏元素 (.toggle(boolean)): 根据匹配结果(true 表示匹配,false 表示不匹配),使用 toggle() 方法来显示或隐藏表格行。

HTML 结构准备

一个规范的HTML表格结构对于实现动态筛选至关重要。它应该包含一个搜索输入框,以及具有 (表头)和

(表体)的 元素。特别需要注意的是,id 属性应赋给
元素,而不是 。这是因为筛选操作通常针对整个表格的行进行。

立即学习前端免费学习笔记(深入)”;

以下是一个推荐的HTML结构示例:

飞书多维表格
飞书多维表格

表格形态的AI工作流搭建工具,支持批量化的AI创作与分析任务,接入DeepSeek R1满血版

下载
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HTML 表格动态筛选</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <style>
        body { font-family: Arial, sans-serif; margin: 20px; }
        input[type="text"] { padding: 8px; margin-bottom: 20px; width: 300px; border: 1px solid #ddd; }
        table { width: 100%; border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; }
        .fortextbox { margin-left: 10px; } /* 示例样式,可根据需求调整 */
    </style>
</head>
<body>

    <div>
        <span>搜索内容:</span>
        <input id="myInput" class="fortextbox" type="text" placeholder="输入关键字进行搜索...">
    </div>

    <table id="myTable">
        <thead>
            <tr>
                <th style="text-align: right;">S.No</th>
                <th>Testcase</th>
                <th>Result:</th>
                <th>SECTION</th>
                <th>Reason</th>
                <th>Analysis</th>
            </tr>
        </thead>
        <tbody>
            <tr><td style="text-align: right;">0</td><td>CallsiteMemLeakReportInitial</td><td>FAILED</td><td>section test_case</td><td>Mem leak found before the run</td><td>Script issue</td></tr>
            <tr><td style="text-align: right;">1</td><td>FinalMemLeakReport</td><td>FAILED</td><td>section check_final_mem_leaks</td><td>Memory Leaks Found</td><td>Script issue</td></tr>
            <tr><td style="text-align: right;">2</td><td>CallsiteMemLeakReportFinal</td><td>FAILED</td><td>section test_case</td><td>Mem leak found before the run</td><td>Script issue</td></tr>
            <tr><td style="text-align: right;">3</td><td>InitialMemLeakReport</td><td>PASSED</td><td></td><td></td><td></td></tr>
            <tr><td style="text-align: right;">4</td><td>TriggerInterfaceFlaps</td><td>PASSED</td><td></td><td></td><td></td></tr>
            <tr><td style="text-align: right;">5</td><td>TriggerVlanInterfaceFlaps</td><td>PASSED</td><td></td><td></td><td></td></tr>
            <tr><td style="text-align: right;">6</td><td>TriggerClearIPOspfProcess</td><td>PASSED</td><td></td><td></td><td></td></tr>
            <tr><td style="text-align: right;">7</td><td>TriggerClearIPDTProcess</td><td>PASSED</td><td></td><td></td><td></td></tr>
            <tr><td style="text-align: right;">8</td><td>TriggerClearIPRouteProcess</td><td>PASSED</td><td></td><td></td><td></td></tr>
            <tr><td style="text-align: right;">9</td><td>TriggerClearAuthSessions</td><td>PASSED</td><td></td><td></td><td></td></tr>
            <tr><td style="text-align: right;">10</td><td>TriggerClearFlowMonitorCace</td><td>PASSED</td><td></td><td></td><td></td></tr>
            <tr><td style="text-align: right;">11</td><td>TriggerBgpNeighborFlap</td><td>PASSED</td><td></td><td></td><td></td></tr>
            <tr><td style="text-align: right;">12</td><td>TriggerVlanInterfaceFlaps</td><td>PASSED</td><td></td><td></td><td></td></tr>
        </tbody>
    </table>

</body>
</html>

JavaScript/jQuery 实现步骤

最初,在尝试实现表格筛选时,一个常见的误区是将 id="myTable" 赋给

元素,并使用 $("#myTable td") 作为筛选目标。然而,正确的做法是让 id="myTable" 属于
标签,并且筛选操作应该作用于 内的每一行 (),而不是单个单元格 ( 元素下的所有 (表格行)。这确保了我们只对数据行进行筛选,而不会影响到表头。
  • filter(function() {...}): 遍历每一个匹配到的
  • 元素。在回调函数中,this 指向当前的 DOM元素。
  • $(this).text().toLowerCase(): 获取当前行的所有文本内容(包括所有单元格的文本),并转换为小写。
  • indexOf(value) > -1: 检查行文本是否包含搜索值。
  • $(this).toggle(isMatch): toggle() 方法根据传入的布尔值决定元素的显示或隐藏。如果 isMatch 为 true,则显示该行;如果为 false,则隐藏该行。
  • 完整示例代码

    将上述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>HTML 表格动态筛选教程</title>
        <!-- 引入 jQuery 库 -->
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
        <style>
            body { font-family: Arial, sans-serif; margin: 20px; }
            input[type="text"] { padding: 8px; margin-bottom: 20px; width: 300px; border: 1px solid #ddd; }
            table { width: 100%; border-collapse: collapse; margin-top: 20px; }
            th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
            th { background-color: #f2f2f2; }
            .fortextbox { margin-left: 10px; }
        </style>
    </head>
    <body>
    
        <h1>动态表格筛选示例</h1>
    
        <div>
            <span>搜索内容:</span>
            <input id="myInput" class="fortextbox" type="text" placeholder="输入关键字进行搜索...">
        </div>
    
        <table id="myTable">
            <thead>
                <tr>
                    <th style="text-align: right;">S.No</th>
                    <th>Testcase</th>
                    <th>Result:</th>
                    <th>SECTION</th>
                    <th>Reason</th>
                    <th>Analysis</th>
                </tr>
            </thead>
            <tbody>
                <tr><td style="text-align: right;">0</td><td>CallsiteMemLeakReportInitial</td><td>FAILED</td><td>section test_case</td><td>Mem leak found before the run</td><td>Script issue</td></tr>
                <tr><td style="text-align: right;">1</td><td>FinalMemLeakReport</td><td>FAILED</td><td>section check_final_mem_leaks</td><td>Memory Leaks Found</td><td>Script issue</td></tr>
                <tr><td style="text-align: right;">2</td><td>CallsiteMemLeakReportFinal</td><td>FAILED</td><td>section test_case</td><td>Mem leak found before the run</td><td>Script issue</td></tr>
                <tr><td style="text-align: right;">3</td><td>InitialMemLeakReport</td><td>PASSED</td><td></td><td></td><td></td></tr>
                <tr><td style="text-align: right;">4</td><td>TriggerInterfaceFlaps</td><td>PASSED</td><td></td><td></td><td></td></tr>
                <tr><td style="text-align: right;">5</td><td>TriggerVlanInterfaceFlaps</td><td>PASSED</td><td></td><td></td><td></td></tr>
                <tr><td style="text-align: right;">6</td><td>TriggerClearIPOspfProcess</td><td>PASSED</td><td></td><td></td><td></td></tr>
                <tr><td style="text-align: right;">7</td><td>TriggerClearIPDTProcess</td><td>PASSED</td><td></td><td></td><td></td></tr>
                <tr><td style="text-align: right;">8</td><td>TriggerClearIPRouteProcess</td><td>PASSED</td><td></td><td></td><td></td></tr>
                <tr><td style="text-align: right;">9</td><td>TriggerClearAuthSessions</td><td>PASSED</td><td></td><td></td><td></td></tr>
                <tr><td style="text-align: right;">10</td><td>TriggerClearFlowMonitorCace</td><td>PASSED</td><td></td><td></td><td></td></tr>
                <tr><td style="text-align: right;">11</td><td>TriggerBgpNeighborFlap</td><td>PASSED</td><td></td><td></td><td></td></tr>
                <tr><td style="text-align: right;">12</td><td>TriggerVlanInterfaceFlaps</td><td>PASSED</td><td></td><td></td><td></td></tr>
            </tbody>
        </table>
    
        <script>
            $(document).ready(function() {
                $("#myInput").on("keyup", function() {
                    var value = $(this).val().toLowerCase();
                    $("#myTable tbody tr").filter(function() {
                        var rowText = $(this).text().toLowerCase();
                        var isMatch = rowText.indexOf(value) > -1;
                        $(this).toggle(isMatch);
                    });
                });
            });
        </script>
    
    </body>
    </html>

    注意事项与优化

    1. HTML 结构规范性: 始终使用
    来组织表格内容。这不仅有助于筛选逻辑的清晰实现,也提高了表格的语义性和可访问性。
  • 性能考量: 对于包含成千上万行的超大型表格,每次 keyup 事件都遍历所有行可能会导致性能问题。在这种情况下,可以考虑使用节流 (throttle)防抖 (debounce) 技术来限制事件处理函数的执行频率。
  • 特定列筛选: 如果需要只对表格的某一列进行筛选(例如,只搜索“Testcase”列),可以修改 filter 回调函数内部的逻辑,使其只获取特定
  • )。这样可以确保整个行根据其内容进行显示或隐藏。

    以下是修正后的jQuery代码,用于实现动态表格筛选:

    $(document).ready(function() {
        // 监听搜索输入框的 keyup 事件
        $("#myInput").on("keyup", function() {
            // 获取输入框的值,并转换为小写,以便进行不区分大小写的搜索
            var value = $(this).val().toLowerCase();
    
            // 筛选表格体 (tbody) 中的每一行 (tr)
            // 注意:这里选择器是 $("#myTable tbody tr"),确保只筛选数据行
            $("#myTable tbody tr").filter(function() {
                // 获取当前行的所有文本内容,并转换为小写
                // 然后检查是否包含搜索值
                var rowText = $(this).text().toLowerCase();
                var isMatch = rowText.indexOf(value) > -1;
    
                // 根据匹配结果显示或隐藏当前行
                $(this).toggle(isMatch);
            });
        });
    });

    代码解释:

    • $(document).ready(function(){...}): 确保在DOM完全加载后再执行jQuery代码,防止出现元素未找到的错误。
    • $("#myInput").on("keyup", function() {...}): 绑定 keyup 事件到ID为 myInput 的搜索框。
    • var value = $(this).val().toLowerCase();: 获取用户输入并将其转换为小写。
    • $("#myTable tbody tr").filter(function() {...}): 这是关键的修正。
      • $("#myTable tbody tr"):这个选择器精确地定位到ID为 myTable 的表格内部的
    元素的文本内容。例如,要筛选第二列:
    $("#myTable tbody tr").filter(function() {
        // $(this).children('td').eq(1) 获取当前行的第二个<td>元素(索引从0开始)
        var columnText = $(this).children('td').eq(1).text().toLowerCase();
        $(this).toggle(columnText.indexOf(value) > -1);
    });
  • 无结果提示: 当筛选结果为空时,可以考虑在表格下方显示一条“未找到匹配项”的提示信息,以增强用户体验。
  • 清空搜索框: 当用户清空搜索框时,所有被隐藏的行应自动重新显示。当前的实现已经能做到这一点,因为空字符串 "" 匹配所有内容。
  • 总结

    通过本教程,您应该已经掌握了使用 jQuery 为 HTML 表格添加动态筛选功能的核心技术。关键在于理解正确的HTML表格结构、jQuery选择器的精确使用以及 keyup、filter 和 toggle 方法的协同工作。通过灵活运用这些知识,您可以为用户提供更加高效和友好的数据交互体验。记住,始终关注代码的健壮性、性能和用户体验,以构建高质量的Web应用。

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    WorkBuddy
    WorkBuddy

    腾讯云推出的AI原生桌面智能体工作台

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

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

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

    156

    2023.09.12

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

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

    335

    2023.10.13

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

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

    406

    2023.11.10

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

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

    515

    2023.12.04

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

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

    312

    2023.12.06

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

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

    128

    2024.02.23

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

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

    183

    2024.02.23

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

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

    51

    2026.01.13

    C# ASP.NET Core微服务架构与API网关实践
    C# ASP.NET Core微服务架构与API网关实践

    本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

    76

    2026.03.11

    热门下载

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

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    React 教程
    React 教程

    共58课时 | 6万人学习

    TypeScript 教程
    TypeScript 教程

    共19课时 | 3.4万人学习

    Bootstrap 5教程
    Bootstrap 5教程

    共46课时 | 3.6万人学习

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

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号