实现基于JavaScript的实时表格搜索过滤功能教程

实现基于JavaScript的实时表格搜索过滤功能教程

本教程详细介绍了如何利用javascript实现网页表格的实时搜索过滤功能,无需用户按下回车键即可动态更新显示结果。文章涵盖了html结构、css样式以及两种javascript实现方案:一种是现代简洁的事件监听方法,另一种是传统的`onkeyup`函数方法,并提供了代码示例和关键注意事项,帮助开发者构建高效的用户界面。

1. 引言

在现代Web应用中,用户经常需要从大量数据中快速查找特定信息。对于以表格形式展示的数据,提供一个实时搜索过滤功能可以极大地提升用户体验。本文将指导您如何使用纯JavaScript在客户端实现这一功能,当用户在搜索框中输入内容时,表格数据会即时根据输入进行筛选,而无需点击任何按钮或按下回车键。

2. 核心原理

实时搜索过滤的核心原理是监听搜索输入框的输入事件,每当输入框内容发生变化时,就遍历表格中的每一行数据。对于每一行,检查其特定列的内容是否包含搜索关键词。如果包含,则显示该行;如果不包含,则隐藏该行。

3. HTML 结构准备

首先,我们需要一个搜索输入框和一个用于展示数据的HTML表格。表格的结构应包含表头(

)和表体(

),这有助于更好地组织内容和提高可访问性。

    实时表格搜索过滤           
Id Bin Tür Banka Adı Type Name Oluşturma Tarihi Güncelleme Tarihi
1 123456 类型A 银行X Category1 产品名称A 2023-01-01 2023-01-02
2 654321 类型B 银行Y Category2 服务项目B 2023-01-03 2023-01-04
3 987654 类型A 银行Z Category1 解决方案C 2023-01-05 2023-01-06

关于数据填充:在实际应用中,表格数据通常来自后端API(例如通过PHP获取JSON数据)。您可以使用PHP或其他后端语言将数据动态地填充到

标签中。例如,原始问题中的PHP代码片段展示了如何从JSON URL获取数据并将其渲染为表格行。这里我们使用静态示例数据来演示JavaScript过滤逻辑。

<?php// 假设这是您的PHP代码,用于从API获取数据并渲染表格$json_url = "websitename"; // 替换为您的API地址$json = file_get_contents($json_url);$data = json_decode($json, TRUE);echo "";echo "";echo "";echo "";echo "";echo "";echo "";foreach($data as $record) { echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo "";}echo "";echo "
IdBinTürBanka AdıTypeNameOluşturma TarihiGüncelleme Tarihi
" . htmlspecialchars($record["id"]) . "" . htmlspecialchars($record["bin"]) . "" . htmlspecialchars($record["tur"]) . "" . htmlspecialchars($record["banka_adi"]) . "" . htmlspecialchars($record["type"]) . "" . htmlspecialchars($record["name"]) . "" . htmlspecialchars($record["created_at"]) . "" . htmlspecialchars($record["updated_at"]) . "
";?>

4. CSS 样式(可选但推荐)

为了使表格和搜索框具有更好的视觉效果,可以添加一些基本的CSS样式。

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

/* style.css */* {  box-sizing: border-box;}#myInput {  background-image: url('/css/searchicon.png'); /* 搜索图标,根据实际路径调整 */  background-position: 10px 10px;  background-repeat: no-repeat;  width: 100%;  font-size: 16px;  padding: 12px 20px 12px 40px; /* 留出空间给图标 */  border: 1px solid #ddd;  margin-bottom: 12px;}#myTable {  border-collapse: collapse; /* 合并边框 */  width: 100%;  border: 1px solid #ddd;  font-size: 18px;}#myTable th,#myTable td {  text-align: left;  padding: 12px;}#myTable tr {  border-bottom: 1px solid #ddd;}#myTable tr.header,#myTable tbody tr:hover { /* 表头和鼠标悬停行背景色 */  background-color: #f1f1f1;}

5. JavaScript 实现实时过滤

我们将介绍两种JavaScript实现方法。

5.1 方法一:使用现代事件监听器(推荐)

这种方法使用addEventListener(‘input’)来监听输入框的实时变化,并利用row.hidden属性来控制行的显示与隐藏,代码更加简洁和现代化。

// script.jswindow.addEventListener("load", () => {  const searchInput = document.getElementById("myInput");  const tableBodyRows = document.querySelectorAll("#myTable tbody tr"); // 选择tbody下的所有行  searchInput.addEventListener("input", (e) => {    const filter = e.target.value.toUpperCase(); // 获取输入值并转为大写,用于不区分大小写的搜索    tableBodyRows.forEach(row => {      // 假设我们要在表格的第6列(索引为5)进行搜索      // 注意:row.cells 是一个 HTMLCollection,包含当前行的所有 td 元素      const targetCell = row.cells[5]; // 获取第6个单元格 (索引从0开始)      if (targetCell) {        const cellText = targetCell.textContent || targetCell.innerText;        // 如果有过滤条件且单元格内容不包含过滤条件,则隐藏该行        row.hidden = filter && !cellText.toUpperCase().includes(filter);      }    });  });});

代码解释:

window.addEventListener(“load”, …): 确保DOM完全加载后再执行JavaScript,避免因元素未加载而导致的错误。searchInput.addEventListener(“input”, …): 监听myInput输入框的input事件。这个事件在输入框的值发生任何变化时都会触发,包括粘贴、剪切、拖放等,比keyup更全面。e.target.value.toUpperCase(): 获取当前输入框的值,并将其转换为大写,以便进行不区分大小写的搜索。document.querySelectorAll(“#myTable tbody tr”): 选中id为myTable的表格中tbody下的所有tr元素。forEach(row => { … }): 遍历所有表格行。row.cells[5]: 获取当前行的第6个单元格()。在HTML表格中,cells属性返回一个HTMLCollection,包含tr元素的所有或

子元素。索引从0开始,所以第6列是索引5。cellText.toUpperCase().includes(filter): 检查单元格的文本内容(转换为大写后)是否包含过滤关键词。row.hidden = …: 这是控制行显示/隐藏的关键。当row.hidden设置为true时,元素会被隐藏;设置为false时,元素会显示。这种方法比直接修改style.display更简洁。

5.2 方法二:使用传统的 onkeyup 函数

这种方法与原始问题中尝试的方法类似,通过onkeyup事件调用一个全局函数来执行过滤。

// script.jsfunction myFunction() {  var input, filter, table, tr, td, i, txtValue;  input = document.getElementById("myInput");  filter = input.value.toUpperCase();  table = document.getElementById("myTable");  tr = table.getElementsByTagName("tr"); // 获取所有行,包括表头  // 遍历所有表格行,从索引1开始,跳过表头行  for (i = 1; i  -1) {        tr[i].style.display = ""; // 如果匹配,则显示该行      } else {        tr[i].style.display = "none"; // 如果不匹配,则隐藏该行      }    }  }}// 在HTML中,需要在input标签上添加 onkeyup="myFunction()"// 

代码解释:

onkeyup=”myFunction()”: 直接在HTML元素上绑定事件处理器,当用户释放键盘按键时触发myFunction。tr = table.getElementsByTagName(“tr”): 获取表格中的所有tr元素,包括

中的表头行。for (i = 1; i tr[i].style.display = “”: 将行的display样式设置为空字符串,使其恢复默认显示(通常是table-row)。tr[i].style.display = “none”: 隐藏行。

6. 注意事项与最佳实践

ID 匹配: 确保JavaScript中引用的元素ID(如myInput, myTable)与HTML中的ID完全一致,包括大小写。这是常见的错误来源。搜索列选择: row.cells[index]中的index决定了您要搜索哪一列的数据。请根据您的表格结构和需求调整此索引。性能优化: 对于包含成千上万行数据的大型表格,客户端JavaScript过滤可能会导致性能问题。在这种情况下,考虑将过滤逻辑放在服务器端实现,每次输入时向服务器发送请求并返回过滤后的数据。事件选择:input事件(推荐):在输入框值改变时立即触发,提供最实时的体验。keyup事件:在键盘按键释放时触发。可能无法捕获所有值变化(例如通过鼠标粘贴)。语义化HTML: 使用

标签可以使表格结构更清晰,也方便JavaScript精确选择要操作的行(例如,#myTable tbody tr)。可访问性:为input标签添加placeholder和title属性,提供清晰的提示。autocomplete=”off”可以防止浏览器自动填充搜索框,这在某些实时搜索场景下是希望的。错误处理: 在实际项目中,可能需要添加更多的错误处理,例如检查td是否存在,以防止在某些行没有足够列时脚本出错。

7. 总结

通过本教程,您应该已经掌握了两种在网页表格中实现实时搜索过滤的方法。推荐使用现代的addEventListener(‘input’)配合row.hidden属性的方法,因为它更简洁、更高效且能捕获所有输入变化。选择适合您项目需求的方法,并结合最佳实践,可以为用户提供一个流畅、高效的数据查找体验。

以上就是实现基于JavaScript的实时表格搜索过滤功能教程的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1334317.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月12日 20:12:08
下一篇 2025年12月12日 20:12:31

相关推荐

  • 如何用PHP代码实现用户行为分析功能_PHP用户行为分析功能实现与数据挖掘教程

    通过PHP实现用户行为分析,可记录页面访问、按钮点击等事件。首先利用$_SERVER获取请求信息并写入日志或数据库;其次设计用户行为表结构化存储事件数据,支持高并发下的批量插入与会话标识处理;再通过session_start()与$_SESSION跟踪用户浏览路径,保留最近访问记录用于漏斗分析;结合…

    好文分享 2025年12月12日
    000
  • PHP DOMDocument:高效解析HTML并提取嵌套元素与属性

    本教程详细介绍如何利用php的domdocument类解析html内容,特别是当内部结构不确定时,如何遍历所有嵌套子元素并提取它们的文本内容及属性信息。通过示例代码,您将学习加载html、遍历dom树以及访问元素的标签名、值和属性,从而实现对复杂html结构的精准数据抓取。 1. PHP DOMDo…

    2025年12月12日
    000
  • Laravel 8 中利用 Eloquent 关联统计每个分类下的文章数量

    本教程详细介绍了如何在 laravel 8 中,通过 eloquent orm 的模型关联功能,高效且优雅地统计每个分类(category)下关联的文章(post)数量。我们将学习如何定义 `hasmany` 关系,并利用 `withcount` 方法简化数据查询,避免手动编写复杂的 sql joi…

    2025年12月12日
    000
  • PHP实现全站会话超时自动登出机制

    本教程旨在详细讲解如何在php网站中实现一个全局性的会话超时自动登出机制。通过创建一个集中的会话检查文件并在所有受保护页面中引用,可以确保用户在指定不活动时间后自动登出,从而提升网站安全性和用户体验,避免了在每个页面单独编写会话检查逻辑的繁琐。 引言:构建安全的会话管理 在开发电商网站或其他需要用户…

    2025年12月12日
    000
  • HTML结构与动态表单行提交:确保数据完整性

    在处理包含动态添加行的表单时,若提交后新增数据缺失,通常源于不正确的HTML结构。本文将深入探讨`form`、`table`及相关元素的正确嵌套方式,强调HTML语义对表单提交行为的关键影响。通过修正无效的结构,并结合JavaScript动态添加行,确保所有用户输入,包括动态生成的部分,都能被成功捕…

    2025年12月12日
    000
  • PHP会话变量在多步骤表单中为空的诊断与解决

    本文旨在解决php多步骤表单中`$_session`变量在后续步骤中显示为`null`的问题。核心在于理解http请求的无状态性、变量作用域以及如何通过`$_session`或隐藏字段在不同请求间持久化数据。文章将详细分析问题成因,提供诊断方法和实用的解决方案,并辅以代码示例,确保用户注册后的自动登…

    2025年12月12日
    000
  • 在API Platform中自定义POST操作的HTTP状态码

    本文详细介绍了在api platform中如何自定义post操作的http状态码。通过在`#[apiresource]`注解的`collectionoperations`中添加`status`键,开发者可以轻松地将默认的201 created响应更改为200 ok或其他任意状态码,以满足特定业务需求…

    2025年12月12日
    000
  • 解决Lumen路由组中URL参数访问的实用指南

    本文针对lumen框架中在路由组闭包内直接访问url参数时遇到的“参数过少”错误,提供了一种实用的解决方案。由于lumen路由器不直接支持类似laravel的`route::parameter()`方法,本教程将指导开发者通过解析`$_server[‘request_uri’…

    2025年12月12日
    000
  • WooCommerce订单邮件:根据产品属性动态添加自定义收件人

    本教程详细介绍了如何在WooCommerce中利用woocommerce_email_recipient_new_order过滤器,根据订单中产品的特定属性(无论是简单产品还是可变产品),动态地向新订单邮件添加自定义收件人。文章提供了优化的代码示例,并解释了如何正确获取和检查产品属性,以实现灵活的邮…

    2025年12月12日
    000
  • Laravel Blade中基于数据值动态分组HTML元素

    本文详细介绍了如何在Laravel Blade模板中,根据数据项的特定值(如0或1)动态地对HTML元素进行分组。通过引入一个状态变量来跟踪前一个数据项的值,我们可以智能地控制分组容器(例如`superseted`类`div`)的开启与关闭,从而生成符合特定结构要求的HTML输出,有效解决传统`fo…

    2025年12月12日
    000
  • PHP数组分块交替排序:实现奇偶块升降序排列的技巧

    本文详细介绍了如何实现一个php函数,将数字数组按照每5个元素一组进行分块,并使这些块交替地以升序和降序排列。通过先对整个数组进行一次性排序,然后利用`array_splice`和`array_reverse`等函数,高效地提取并重组元素,最终得到符合特定排序规则的新数组。教程将提供完整的代码示例和…

    2025年12月12日
    000
  • PHP与MySQL日期时间处理:从用户输入到数据库存储与展示优化

    本教程详细指导如何在php应用中处理用户输入的日期和时间数据,确保其正确存储到mysql数据库,并优化在前端的展示格式。内容涵盖前端输入控件选择、php后端数据转换与验证,以及mysql查询结果的格式化技巧,旨在提升用户体验和数据一致性。 1. 用户友好的日期时间输入 为了提供更好的用户体验并减少输…

    2025年12月12日
    000
  • 如何通过XAMPP快速搭建PHP开发环境的详细步骤?

    XAMPP可快速搭建PHP开发环境,首先下载安装并启动Apache与MySQL服务,通过访问localhost验证运行状态;接着在htdocs目录创建info.php文件测试PHP解析功能;然后登录phpMyAdmin管理数据库,配置安全设置;最后可选配置虚拟主机,编辑httpd-vhosts.co…

    2025年12月12日
    000
  • PHP中实现不区分大小写的字符串比较

    php的`==`运算符执行区分大小写的字符串比较,导致”sometext”与”sometext”被判定为不相等。为实现不区分大小写的比较,核心方法是在比较前使用`strtolower()`或`strtoupper()`函数将两个字符串统一转换为小写或大…

    2025年12月12日
    000
  • Laravel Blade中动态数据传递至链接的正确姿势

    本教程详细阐述了在laravel blade模板中如何正确地将动态数据(如数据库记录id)传递到“标签的`href`属性中,避免常见的语法错误。文章涵盖了直接使用blade语法进行变量插值的方法,并进一步介绍了利用命名路由和`route()`辅助函数构建更健壮、可维护url的最佳实践,确…

    2025年12月12日
    000
  • Laravel 中集成 PhpSpreadsheet 导出 Excel 数据指南

    本教程旨在解决在 Laravel 项目中使用 PhpSpreadsheet 导出 Excel 数据时遇到的“类未找到”错误。文章将详细指导如何通过 Composer 正确安装 PhpSpreadsheet 依赖,并强调在控制器中正确引用其命名空间的重要性,同时提供优化后的代码示例,以确保 PhpSp…

    2025年12月12日
    000
  • 在 Laravel Eloquent 中高效查询 JSON 数组字段的教程

    本文旨在解决 laravel eloquent 在查询 json 数组字段时遇到的路径解析问题。当需要根据 json 数组中特定索引的值进行筛选时,eloquent 的 `wherejsondoesntcontain` 或 `where` 方法可能因生成错误的 sql 路径(例如 `$.&#8221…

    2025年12月12日
    000
  • PHP中解析并以HTML表格形式展示JSON数组数据

    本教程详细介绍了如何在php中从远程url获取json数据,将其解码为可操作的php关联数组,并演示了如何遍历该数组,提取每个元素的特定字段(如id、bin、tur等),最终以结构化的html表格形式呈现这些数据。通过此方法,开发者可以高效地将json数据转换为用户友好的网页视图。 在现代Web开发…

    2025年12月12日
    000
  • PHP中利用可变变量优化循环内动态赋值的实践指南

    本文介绍如何在PHP循环中,利用可变变量(Variable Variables)特性,优化对动态命名变量的赋值逻辑。针对传统switch语句处理多条件赋值的冗余问题,通过将变量名作为字符串动态解析,实现代码的极大简化和可维护性提升,适用于需要根据数据字段动态创建或引用变量的场景。 引言:传统动态赋值…

    2025年12月12日
    000
  • 使用 SendGrid 结合本地模板文件发送动态邮件内容的教程

    本教程将指导您如何在使用 sendgrid 发送邮件时,有效地将动态数据注入到本地 html 模板文件中。针对 `file_get_contents` 读取模板后无法直接传递变量的问题,我们将详细介绍通过字符串替换(`str_replace`)机制实现数据注入的方法,并提供清晰的代码示例和最佳实践建…

    2025年12月12日
    000

发表回复

登录后才能评论
关注微信