HTML表格多列内容实时搜索过滤教程


HTML表格多列内容实时搜索过滤教程

本教程详细介绍了如何使用j*ascript为html表格实现多列实时搜索过滤功能。通过修改`myfunction`,您可以同时对表格中的多个列(如名称和国家)进行内容匹配,从而提升用户数据查找的效率和体验。文章包含完整的html和j*ascript代码示例,并解释了实现逻辑及注意事项,帮助开发者快速掌握并应用此技术。

在现代Web应用中,用户经常需要从大量表格数据中快速定位特定信息。客户端实时搜索过滤功能能够显著提升用户体验。通常,我们可能只需要对表格的某一列进行搜索,但实际需求往往更为复杂,需要同时搜索多个列的内容。本教程将指导您如何通过简单的J*aScript代码修改,实现HTML表格的多列实时搜索过滤。

HTML结构基础

首先,我们需要一个基本的HTML表格结构和一个用于输入搜索关键词的文本框。搜索框通过onkeyup事件绑定一个J*aScript函数,以便在用户输入时实时触发过滤。

<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>Germany</td>
  </tr>
  <tr>
    <td>Berglunds snabbkop</td>
    <td>Sweden</td>
  </tr>
  <tr>
    <td>Island Trading</td>
    <td>UK</td>
  </tr>
  <tr>
    <td>Koniglich Essen</td>
    <td>Germany</td>
  </tr>
</table>

在这个结构中:

  • 是搜索输入框,当用户每次按键抬起时,myFunction() 将被调用。
  • 是需要被过滤的表格。
  • 是表格的标题行,通常不参与过滤。
  • 元素代表数据行,每个
    元素代表一个单元格,对应表格的一列。

    实现单列搜索的局限性

    最初的单列搜索实现通常会聚焦于表格的第一列。例如,以下J*aScript代码只对“姓名”列进行过滤:

    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"); // 获取所有行
    
      for (i = 0; i < tr.length; i++) {
        // 过滤掉标题行
        if (tr[i].classList.contains('header')) {
            continue;
        }
        td = tr[i].getElementsByTagName("td")[0]; // 只获取第一列(姓名)的单元格
        if (td) {
          txtValue = td.textContent || td.innerText; // 获取单元格文本内容
          if (txtValue.toUpperCase().indexOf(filter) > -1) { // 如果文本包含搜索关键词
            tr[i].style.display = ""; // 显示该行
          } else {
            tr[i].style.display = "none"; // 隐藏该行
          }
        }
      }
    }

    这段代码的问题在于 td = tr[i].getElementsByTagName("td")[0]; 这一行,它明确指定只获取索引为 0 的单元格(即第一列)。如果我们需要同时搜索“姓名”和“国家”两列,这种方法就无法满足需求。

    实现多列搜索过滤

    要实现多列搜索,我们需要修改 myFunction,使其能够同时检查目标列的文本内容。关键在于获取所有相关的列,并使用逻辑或(||)操作符来组合搜索条件。

    以下是修改后的 myFunction 实现:

    <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"); // 获取表格的所有行
    
      // 遍历所有表格行,隐藏不匹配搜索查询的行
      for (i = 0; i < tr.length; i++) {
        // 跳过表格标题行
        if (tr[i].classList.contains('header')) {
            continue;
        }
    
        // 获取第一列(姓名)和第二列(国家)的单元格
        td = tr[i].getElementsByTagName("td")[0]; // 第一列
        td1 = tr[i].getElementsByTagName("td")[1]; // 第二列
    
        // 确保单元格存在,避免潜在错误
        if (td && td1) {
          txtValue = td.textContent || td.innerText;     // 获取第一列文本内容
          txtValue1 = 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"; // 否则隐藏该行
          }
        } else {
            // 如果行数据不完整,例如只有一列,也隐藏该行或根据需求处理
            tr[i].style.display = "none";
        }
      }
    }
    </script>

    代码解析

    1. 变量声明:

      云从科技AI开放平台 云从科技AI开放平台

      云从AI开放平台

      云从科技AI开放平台 99 查看详情 云从科技AI开放平台
      • input, filter, table, tr 的作用与单列搜索相同。
      • 新增 td1, txtValue1 用于处理第二列的数据。
    2. 获取多列单元格:

      • td = tr[i].getElementsByTagName("td")[0]; 获取当前行的第一个
    元素(索引为0,即“姓名”列)。
  • td1 = tr[i].getElementsByTagName("td")[1]; 获取当前行的第二个
  • 元素(索引为1,即“国家”列)。
  • getElementsByTagName("td") 返回的是一个 HTMLCollection,可以通过索引访问其中的元素。
  • 文本内容提取:

    • txtValue = td.textContent || td.innerText; 从第一个单元格中提取文本内容。
    • txtValue1 = td1.textContent || td1.innerText; 从第二个单元格中提取文本内容。textContent 和 innerText 都是获取元素文本的方法,textContent 兼容性更好,innerText 在某些旧版浏览器或特定情况下可能表现不同,使用 || 提供了一个回退方案。
  • 组合搜索条件:

    • if (txtValue.toUpperCase().indexOf(filter) > -1 || txtValue1.toUpperCase().indexOf(filter) > -1) 是实现多列搜索的核心。
    • txtValue.toUpperCase().indexOf(filter) > -1 检查第一个列的文本是否包含搜索关键词(不区分大小写)。
    • txtValue1.toUpperCase().indexOf(filter) > -1 检查第二个列的文本是否包含搜索关键词。
    • || (逻辑或) 操作符表示:只要两个条件中的 任意一个 为真,整个表达式就为真。这意味着只要搜索关键词在“姓名”或“国家”列中出现,该行就会被显示。
  • 显示/隐藏行:

    • 如果条件为真,tr[i].style.display = ""; 将该行显示出来。
    • 如果条件为假,tr[i].style.display = "none"; 将该行隐藏。
  • 扩展到更多列

    如果您的表格有更多列需要参与搜索,只需按照相同的模式添加更多的 td 变量和 txtValue 变量,并在 if 条件中使用 || 操作符将它们组合起来。例如,如果需要搜索三列(姓名、国家、城市),代码将变为:

    // ...
    td = tr[i].getElementsByTagName("td")[0];
    td1 = tr[i].getElementsByTagName("td")[1];
    td2 = tr[i].getElementsByTagName("td")[2]; // 获取第三列
    
    if (td && td1 && td2) { // 确保所有目标单元格都存在
        txtValue = td.textContent || td.innerText;
        txtValue1 = td1.textContent || td1.innerText;
        txtValue2 = td2.textContent || td2.innerText; // 获取第三列文本
    
        if (txtValue.toUpperCase().indexOf(filter) > -1 || 
            txtValue1.toUpperCase().indexOf(filter) > -1 ||
            txtValue2.toUpperCase().indexOf(filter) > -1) { // 组合三个条件
            tr[i].style.display = "";
        } else {
            tr[i].style.display = "none";
        }
    }
    // ...

    注意事项与最佳实践

    1. 性能优化: 对于包含成千上万行数据的大型表格,客户端J*aScript搜索可能会导致性能问题。在这种情况下,考虑使用分页、虚拟滚动或将搜索功能转移到服务器端处理。
    2. 用户体验: 搜索框的 placeholder 属性应清晰地指示用户可以搜索哪些内容,例如“搜索姓名或国家”。
    3. 代码健壮性: 在获取 td 元素时,最好进行 if (td) 检查,以防止在某些行数据不完整(例如,少于预期的列数)时导致J*aScript错误。本教程中的代码已经包含了 if (td && td1) 这样的检查。
    4. 区分大小写: toUpperCase() 方法确保了搜索是不区分大小写的,这通常是用户期望的行为。如果您需要区分大小写的搜索,可以移除 toUpperCase() 调用。
    5. 标题行处理: 在循环中添加 if (tr[i].classList.contains('header')) { continue; } 可以有效地跳过表格的标题行,确保它们不会被过滤或影响搜索结果。

    总结

    通过对J*aScript myFunction 进行简单的修改,特别是通过获取多个

    元素并使用逻辑或 || 运算符组合搜索条件,我们可以轻松地为HTML表格实现强大的多列实时搜索过滤功能。这种方法不仅易于理解和实现,而且能够显著提升用户在处理表格数据时的效率和满意度。开发者可以根据实际需求,灵活扩展此功能以支持更多列的搜索。

以上就是HTML表格多列内容实时搜索过滤教程的详细内容,更多请关注其它相关文章!


# java  # javascript  # 第一个  # 递归  # 单元格  # red  # ai  # ssl  # 浏览器  # html  # seo优化被逮  # 网站建设个人模板  # 怀集网站建设  # 湖北seo营销培训  # 济源福建网站优化推广  # 秦皇岛网站建设服务  # 绥化seo技巧必看  # seo推广网站联系电话  # 产品推广营销方案范文  # 重庆建设空调网站  # 跳过  # 表单  # 行数  # 运算符  # 只需  # 第二个  # 多个 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 《sketchbook》选中部分图案移动方法  CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程  c++如何链接Boost库_c++准标准库的集成与使用  126手机126邮箱登录_126邮箱手机登录入口官网  如何在CSS中实现盒模型多列间距_grid-gap与padding结合  《桃源记2》资源采集攻略  电脑“无法访问指定设备、路径或文件”怎么办?五种权限设置方法  实现可重用自定义Python Range类  Git命令与VS Code UI操作的对应关系解析  Dash应用中自定义HTML页面标题与网站图标(F*icon)的实用指南  电脑桌面图标怎么变大变小_Windows个性化设置第一课【新手入门】  《procreate》绘制渐变效果教程  抖音商城官网是什么_抖音商城官方网址与访问方法  在J*a中如何实现类的继承与方法重用_OOP继承方法重用技巧分享  厨房地面防滑垫的油污怎么洗? 机洗和手洗防滑垫的注意事项  高效调试PHP大型嵌套数组:JSON序列化与可视化工具实践  解决异步Python机器人中同步操作的阻塞问题  火狐浏览器无法自动更新怎么办 手动更新火狐浏览器到最新版本【解决】  《海豚家》注销账号方法  windows10怎么更改下载路径_windows10默认存储位置修改教程  京东快递包裹信息查询入口 京东快递官方查询平台入口  《下一站江湖2》风神腿获取攻略  高德地图导航路线偏差报警频繁怎么办 高德地图路线偏差修复与优化方法  从J*a应用程序中导出MySQL表数据的技术指南  Excel如何快速找到并断开外部数据源链接_Excel外部数据源断开方法  J*aScript桌面应用_Electron多进程架构实战  泰拉瑞亚水晶无法放置问题  Linux如何优化系统启动流程_Linux启动项优化方案  《合金装备4》有望推出重制版!制作人发话了  解决CSS布局中意外顶部空白问题的教程  C++ priority_queue怎么用_C++优先队列底层实现与自定义比较器  Win10运行窗口在哪里打开 Win10调出运行命令框快捷键【技巧】  猫眼电影app怎么查询电影院的营业时间_猫眼电影影院营业时间查询教程  iPhone17Pro如何连接蓝牙耳机_iPhone17Pro蓝牙设备配对与连接方法介绍  易车网官网直达入口 易车网在线登录入口  《虎扑》取消评分记录方法  蛙漫2(台版)正版官网 2025免费网页版分享  手机雨课堂网页版入口免登录 雨课堂网页版可点击直接进入  优化Leaflet弹出层图片显示:条件渲染策略  视频号视频怎么提取文案?提取的文案如何优化与使用?  键盘测试软件哪个好_键盘故障检测工具推荐  sublime如何配置PHP开发环境_在sublime中运行与调试PHP代码  抖音如何解除|直播|权限绑定_抖音关闭并解绑|直播|功能的方法  《爱南宁》认证电动车方法  在J*a里什么是行为抽象_抽象行为对代码复用的提升作用  J*aScript模拟悬停与点击:自动化网页动态元素交互指南  PHP动态导航按钮:根据用户登录状态切换链接与文本  咸鱼怎么设置仅粉丝可见的动态_咸鱼动态粉丝可见设置方法  申通快递物流信息查询 申通快递包裹状态追踪  C++如何实现单例模式_C++线程安全的单例模式写法 

 2025-10-19

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.