导读:本期聚焦于小伙伴创作的《如何实现HTML表格数据动态过滤?原生JavaScript完整教程》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何实现HTML表格数据动态过滤?原生JavaScript完整教程》有用,将其分享出去将是对创作者最好的鼓励。

HTML表格数据动态过滤教程

在网页开发中,表格是展示结构化数据的常用组件,当表格数据量较大时,静态展示会让用户查找目标信息变得困难。动态过滤功能可以让用户通过输入关键词,快速筛选出表格中符合条件的数据,提升页面交互体验。本文将介绍如何基于原生JavaScript实现HTML表格数据的动态过滤功能,无需依赖第三方库,逻辑清晰且易于扩展。

基础HTML表格结构搭建

首先我们需要先构建一个包含表头和数据的标准HTML表格,同时添加一个输入框作为过滤条件的输入入口。注意这里提到的<table>、<thead>、<tbody>等标签都是HTML的表格相关标签,需要按照规范转义展示。

下面的代码展示了基础表格的结构,表格包含姓名、年龄、所属部门三列,并且预留了过滤输入框:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>表格动态过滤示例</title>
    <style>
        .filter-container {
            margin-bottom: 15px;
        }
        #filterInput {
            padding: 8px;
            width: 300px;
            font-size: 14px;
        }
        table {
            border-collapse: collapse;
            width: 100%;
            max-width: 800px;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 12px;
            text-align: left;
        }
        th {
            background-color: #f5f5f5;
        }
        .hidden {
            display: none;
        }
    </style>
</head>
<body>
    <div class="filter-container">
        <label for="filterInput">输入关键词过滤表格数据:</label>
        <input type="text" id="filterInput" placeholder="请输入姓名、年龄或部门关键词">
    </div>

    <table id="dataTable">
        <thead>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>所属部门</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>张三</td>
                <td>28</td>
                <td>技术部</td>
            </tr>
            <tr>
                <td>李四</td>
                <td>32</td>
                <td>产品部</td>
            </tr>
            <tr>
                <td>王五</td>
                <td>25</td>
                <td>技术部</td>
            </tr>
            <tr>
                <td>赵六</td>
                <td>35</td>
                <td>运营部</td>
            </tr>
            <tr>
                <td>孙七</td>
                <td>29</td>
                <td>产品部</td>
            </tr>
        </tbody>
    </table>

    <script src="filter.js"></script>
</body>
</html>

上面的代码中,我们通过CSS设置了表格和输入框的基础样式,同时定义了.hidden类用于控制不符合条件的行隐藏。表格的<tbody>中包含了5条示例数据,后续过滤逻辑会操作这些行。

动态过滤逻辑实现

接下来我们需要编写JavaScript代码,监听输入框的输入事件,每次输入内容变化时,遍历表格的所有数据行,判断行内的文本内容是否包含输入的关键词,不符合条件的行就添加hidden类隐藏,符合条件的则移除该类显示。

下面是过滤逻辑的完整代码,我们将其放在独立的filter.js文件中,也可以直接内联到HTML的<script>标签中:

// 获取输入框和表格tbody元素
const filterInput = document.getElementById('filterInput');
const tableBody = document.querySelector('#dataTable tbody');
// 获取所有表格数据行
const tableRows = tableBody.getElementsByTagName('tr');

// 定义过滤函数
function filterTable() {
    // 获取输入的关键词,转为小写方便不区分大小写匹配
    const filterValue = filterInput.value.toLowerCase().trim();
    
    // 遍历所有行
    for (let i = 0; i < tableRows.length; i++) {
        const currentRow = tableRows[i];
        // 获取当前行的所有单元格
        const cells = currentRow.getElementsByTagName('td');
        let rowContainsFilter = false;
        
        // 遍历当前行的所有单元格,检查是否包含关键词
        for (let j = 0; j < cells.length; j++) {
            const cellText = cells[j].textContent.toLowerCase();
            // 如果单元格内容包含关键词,标记该行符合条件
            if (cellText.includes(filterValue)) {
                rowContainsFilter = true;
                break;
            }
        }
        
        // 根据匹配结果控制行的显示隐藏
        if (rowContainsFilter || filterValue === '') {
            currentRow.classList.remove('hidden');
        } else {
            currentRow.classList.add('hidden');
        }
    }
}

// 监听输入框的输入事件,每次输入都触发过滤
filterInput.addEventListener('input', filterTable);
// 页面加载完成后先执行一次过滤,处理初始状态
window.addEventListener('DOMContentLoaded', filterTable);

这段逻辑的核心流程是:首先获取输入框和表格行的DOM元素,然后定义filterTable函数,每次调用时先获取输入框的内容并做小写处理,接着遍历每一行数据,检查该行所有单元格的内容是否包含关键词。如果包含则显示该行,否则隐藏。最后给输入框绑定input事件,只要输入内容变化就触发过滤,同时页面加载完成后执行一次初始过滤。

功能扩展与优化建议

上述实现已经可以满足基础的表格过滤需求,在实际使用中还可以根据场景做进一步优化:

  • 如果需要过滤时忽略某些列,可以在遍历单元格时增加列索引判断,比如只过滤姓名和部门列,跳过年龄列。
  • 可以添加防抖处理,避免用户输入过快时频繁触发过滤逻辑,减少性能消耗,比如设置300毫秒的延迟执行。
  • 如果表格数据是动态加载的,比如通过接口获取后渲染到页面,只需要在数据渲染完成后重新获取tableRows即可,过滤逻辑不需要修改。
  • 可以添加无匹配结果时的提示,当所有行都被隐藏时,在表格下方显示“未找到匹配的数据”的提示文本。

总结

通过原生JavaScript实现HTML表格动态过滤功能,不需要依赖任何第三方框架,核心逻辑就是监听输入事件、遍历表格行、匹配关键词、控制行的显示隐藏。这种方式兼容性好,逻辑简单,适合大多数中小型项目的表格过滤需求。开发者可以根据实际的业务场景,在上述基础上灵活扩展功能,满足更复杂的使用要求。

HTML表格过滤JavaScript动态筛选DOM操作前端交互表格搜索

免责声明:已尽一切努力确保本网站所含信息的准确性。网站部分内容来源于网络或由用户自行发表,内容观点不代表本站立场。本站是个人网站免费分享,内容仅供个人学习、研究或参考使用,如内容中引用了第三方作品,其版权归原作者所有。若内容触犯了您的权益,请联系我们进行处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。前端、网络、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握网站开发与运维所需的核心技术栈。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端逻辑,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。