0

0

JavaScript实现HTML表格多列搜索过滤功能教程

碧海醫心

碧海醫心

发布时间:2025-10-19 10:14:36

|

1004人浏览过

|

来源于php中文网

原创

JavaScript实现HTML表格多列搜索过滤功能教程

本教程详细介绍了如何利用javascript增强html表格的搜索功能。通过修改基础的单列过滤逻辑,我们将实现一个高效的多列文本搜索方案,使用户能够在一个输入框中同时对表格的多个字段(如姓名、国家)进行模糊匹配,从而显著提升数据检索的灵活性和用户体验。

在网页开发中,表格是展示结构化数据的重要方式,而为表格添加搜索过滤功能则是提升用户体验的关键一环。当数据量较大时,用户往往需要根据多个条件进行筛选。本文将指导您如何使用纯JavaScript实现一个支持多列搜索的HTML表格过滤功能,允许用户在一个搜索框中同时匹配表格中的不同列数据。

HTML结构准备

首先,我们需要一个包含输入框和数据表格的基础HTML结构。搜索输入框将用于接收用户的查询文本,而表格则包含需要被过滤的数据。

<input type="text" id="myInput" onkeyup="myFunction()" placeholder="搜索姓名或国家...">

<table id="myTable">
  <tr class="header">
    <th style="width:60%;">姓名</th>
    <th style="width:40%;">国家</th>
  </tr>
  <tr>
    <td>Alfreds Futterkiste</td>
    <td>德国</td>
  </tr>
  <tr>
    <td>Berglunds snabbkop</td>
    <td>瑞典</td>
  </tr>
  <tr>
    <td>Island Trading</td>
    <td>英国</td>
  </tr>
  <tr>
    <td>Koniglich Essen</td>
    <td>德国</td>
  </tr>
</table>

在这个结构中:

  • id="myInput":搜索输入框的唯一标识符。
  • onkeyup="myFunction()":当用户在输入框中松开按键时,会触发myFunction函数。
  • placeholder:提示用户搜索的内容。
  • id="myTable":数据表格的唯一标识符。
  • 表格包含一个表头 (<tr class="header">) 和多行数据 (<tr>,每行包含两个 <td> 单元格:姓名和国家)。

JavaScript多列搜索逻辑实现

接下来,我们将编写myFunction函数来处理搜索逻辑。核心思想是遍历表格的每一行,获取指定列(例如第一列和第二列)的文本内容,然后判断这些内容是否包含用户的搜索关键词。如果包含,则显示该行;否则,隐藏该行。

Otter.ai
Otter.ai

一个自动的会议记录和笔记工具,会议内容生成和实时转录

下载

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

<script>
function myFunction() {
  // 声明变量
  var input, filter, table, tr, td, td1, i, txtValue, txtValue1;

  // 获取搜索输入框及其值
  input = document.getElementById("myInput");
  filter = input.value.toUpperCase(); // 将搜索关键词转换为大写,实现不区分大小写的搜索

  // 获取表格及其所有行
  table = document.getElementById("myTable");
  tr = table.getElementsByTagName("tr");

  // 遍历所有表格行(跳过表头行,如果表头行有class="header"可以从1开始)
  // 注意:此处假设第一行是表头,所以从索引1开始遍历数据行
  for (i = 0; i < tr.length; i++) {
    // 获取当前行的第一个和第二个<td>元素
    td = tr[i].getElementsByTagName("td")[0]; // 第一列 (姓名)
    td1 = tr[i].getElementsByTagName("td")[1]; // 第二列 (国家)

    // 确保当前行至少有第一个<td>元素
    if (td) {
      // 获取第一个<td>的文本内容
      txtValue = td.textContent || td.innerText;
      // 获取第二个<td>的文本内容
      // 注意:如果td1可能不存在,此处应添加td1的检查,见“注意事项”
      txtValue1 = td1 ? (td1.textContent || td1.innerText) : ""; 

      // 判断任一列的文本内容是否包含搜索关键词
      if (txtValue.toUpperCase().indexOf(filter) > -1 || txtValue1.toUpperCase().indexOf(filter) > -1) {
        tr[i].style.display = ""; // 显示匹配的行
      } else {
        tr[i].style.display = "none"; // 隐藏不匹配的行
      }
    }
  }
}
</script>

代码解析

  1. 变量声明: input, filter, table, tr, td, td1, i, txtValue, txtValue1 等变量用于存储DOM元素、搜索关键词、循环索引和单元格文本。
  2. 获取搜索关键词:
    • input = document.getElementById("myInput"); 获取输入框元素。
    • filter = input.value.toUpperCase(); 获取用户输入的文本,并将其转换为大写,以便进行不区分大小写的匹配。
  3. 获取表格行:
    • table = document.getElementById("myTable"); 获取表格元素。
    • tr = table.getElementsByTagName("tr"); 获取表格中所有的<tr>元素(包括表头)。
  4. 遍历表格行:
    • for (i = 0; i < tr.length; i++): 循环遍历每一行。
    • 重要提示: 如果您的表头行有特定的类名(如class="header"),并且不希望它被过滤,您可以将循环起始索引设置为 i = 1 来跳过它。
  5. 获取单元格内容:
    • td = tr[i].getElementsByTagName("td")[0]; 获取当前行的第一个<td>元素。
    • td1 = tr[i].getElementsByTagName("td")[1]; 获取当前行的第二个<td>元素。
  6. 文本提取与条件判断:
    • if (td): 确保当前行存在至少一个<td>元素,防止因空行或格式错误导致脚本中断。
    • txtValue = td.textContent || td.innerText;: 提取<td>元素的文本内容。textContent是标准属性,innerText是旧版IE兼容属性。
    • txtValue1 = td1 ? (td1.textContent || td1.innerText) : "";: 同样提取第二个<td>的文本。这里添加了一个三元运算符 td1 ? ... : "" 来确保在 td1 不存在时不会尝试访问其属性,从而避免潜在的运行时错误。
    • if (txtValue.toUpperCase().indexOf(filter) > -1 || txtValue1.toUpperCase().indexOf(filter) > -1): 这是实现多列搜索的核心。它检查第一个单元格的文本(转换为大写)是否包含搜索关键词,或者第二个单元格的文本(转换为大写)是否包含搜索关键词。只要任一条件满足,该行就应该显示。
    • tr[i].style.display = "";: 如果匹配成功,设置行的display样式为空字符串,使其显示。
    • tr[i].style.display = "none";: 如果不匹配,设置行的display样式为none,使其隐藏。

注意事项与优化

  • 鲁棒性: 在上面的示例代码中,我们已经对td1的访问进行了改进,确保了即使某些行没有足够的列,脚本也能正常运行。对于更复杂的表格,您可能需要更通用的方法来获取所有相关列的文本,例如遍历所有<td>元素。
  • 性能: 对于包含数千甚至数万行的大型表格,每次按键都遍历所有行可能会导致性能问题。在这种情况下,可以考虑以下优化:
    • 去抖动 (Debouncing):在用户停止输入一段时间后才执行搜索,而不是每次按键都执行。
    • 虚拟滚动 (Virtual Scrolling):只渲染可见区域的行。
    • 服务器端搜索: 将搜索任务交给服务器处理,尤其是当数据量巨大时。
  • 多列动态选择: 如果您希望用户可以动态选择要搜索的列,可以添加复选框或下拉菜单,然后根据用户的选择动态构建搜索条件。
  • 正则表达式搜索: 对于更复杂的搜索模式,可以使用JavaScript的正则表达式(RegExp)代替indexOf。

总结

通过上述步骤,我们成功地为HTML表格添加了强大的多列搜索过滤功能。这个简单的JavaScript解决方案显著提升了用户在大型数据集中查找信息的效率和体验。您可以根据实际需求,在此基础上进行扩展和优化,例如增加更多列的搜索支持、提供更高级的搜索选项,或结合其他JavaScript库以实现更复杂的交互。

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

WorkBuddy
WorkBuddy

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

531

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

258

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

766

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

219

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

357

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

245

2023.11.17

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

547

2023.12.06

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

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

精品课程

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

共58课时 | 6.1万人学习

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号