0

0

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

DDD

DDD

发布时间:2025-11-14 13:01:12

|

682人浏览过

|

来源于php中文网

原创

实现基于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过滤逻辑。
";
echo "";
echo "";
echo "IdBinTürBanka AdıTypeNameOluşturma TarihiGüncelleme Tarihi";
echo "";
echo "";
echo "";

foreach($data as $record) {
 echo "";
 echo "" . htmlspecialchars($record["id"]) . "";
 echo "" . htmlspecialchars($record["bin"]) . "";
 echo "" . htmlspecialchars($record["tur"]) . "";
 echo "" . htmlspecialchars($record["banka_adi"]) . "";
 echo "" . htmlspecialchars($record["type"]) . "";
 echo "" . htmlspecialchars($record["name"]) . "";
 echo "" . htmlspecialchars($record["created_at"]) . "";
 echo "" . htmlspecialchars($record["updated_at"]) . "";
 echo "";
}
echo "";
echo "";
?>

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实现方法。

BJXSHOP网上开店专家
BJXSHOP网上开店专家

BJXShop网上购物系统是一个高效、稳定、安全的电子商店销售平台,经过近三年市场的考验,在中国网购系统中属领先水平;完善的订单管理、销售统计系统;网站模版可DIY、亦可导入导出;会员、商品种类和价格均实现无限等级;管理员权限可细分;整合了多种在线支付接口;强有力搜索引擎支持... 程序更新:此版本是伴江行官方商业版程序,已经终止销售,现于免费给大家使用。比其以前的免费版功能增加了:1,整合了论坛

下载

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

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

// script.js
window.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.js
    function 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 < tr.length; i++) {
        // 假设我们要在表格的第6列(索引为5)进行搜索
        td = tr[i].getElementsByTagName("td")[5]; 
        if (td) {
          txtValue = td.textContent || td.innerText; // 获取单元格文本内容
          if (txtValue.toUpperCase().indexOf(filter) > -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. 注意事项与最佳实践

      1. ID 匹配: 确保JavaScript中引用的元素ID(如myInput, myTable)与HTML中的ID完全一致,包括大小写。这是常见的错误来源。
      2. 搜索列选择: row.cells[index]中的index决定了您要搜索哪一列的数据。请根据您的表格结构和需求调整此索引。
      3. 性能优化: 对于包含成千上万行数据的大型表格,客户端JavaScript过滤可能会导致性能问题。在这种情况下,考虑将过滤逻辑放在服务器端实现,每次输入时向服务器发送请求并返回过滤后的数据。
      4. 事件选择:
        • input事件(推荐):在输入框值改变时立即触发,提供最实时的体验。
        • keyup事件:在键盘按键释放时触发。可能无法捕获所有值变化(例如通过鼠标粘贴)。
      5. 语义化HTML: 使用和 标签可以使表格结构更清晰,也方便JavaScript精确选择要操作的行(例如,#myTable tbody tr)。
      6. 可访问性:
        • 为input标签添加placeholder和title属性,提供清晰的提示。
        • autocomplete="off"可以防止浏览器自动填充搜索框,这在某些实时搜索场景下是希望的。
      7. 错误处理: 在实际项目中,可能需要添加更多的错误处理,例如检查td是否存在,以防止在某些行没有足够列时脚本出错。
      8. 7. 总结

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

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1971

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1295

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1201

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1400

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1229

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1439

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1303

2023.11.13

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

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

精品课程

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

共14课时 | 0.7万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.7万人学习

CSS教程
CSS教程

共754课时 | 17.3万人学习

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

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