新闻中心
实现HTML表格多列搜索功能指南

本教程详细介绍了如何使用j*ascript为html表格实现多列搜索功能。通过修改现有的单列搜索脚本,我们将演示如何同时检索表格中指定列(如“名称”和“国家”)的数据,并根据
用户的输入动态显示或隐藏行,从而显著提升数据筛选的灵活性和用户体验。
在网页开发中,为HTML表格添加搜索功能是提升用户体验的常见需求。通常,我们可能需要用户能够根据表格中的多个字段(例如,姓名和国家)进行搜索,而不是仅仅局限于单个字段。本文将基于一个基础的单列搜索示例,逐步讲解如何扩展其功能,实现高效的多列搜索。
初始单列搜索功能回顾
首先,我们来看一个典型的HTML表格及其对应的单列搜索J*aScript代码。这个示例允许用户通过输入文本来筛选“Name”列的数据。
HTML结构:
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="搜索姓名...">
<table id="myTable">
<tr class="header">
<th style="width:60%;">Name</th>
<th style="width:40%;">Country</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>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++) {
// 获取当前行的第一个<td>元素 (Name列)
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]; 这一行,它明确指定了只获取每行的第一个
微信小程序-康爱多商城
微信小程序-康爱多商城是一个微信小程序的商城demo源码。它实现了商城的首页功能。软件特色:自定义搜索框图标grid水平拖动列表线条中间显示文字
3
查看详情
实现多列搜索功能
为了将搜索范围扩展到“Country”列,我们需要对J*aScript代码进行修改。主要思路是获取额外的列数据,并在判断条件中使用逻辑或(||)运算符,只要任一列匹配搜索关键词,就显示该行。
修改后的J*aScript代码:
<script>
function myFunction() {
// 声明变量
var input, filter, table, tr, td0, td1, i, txtValue0, txtValue1; // 增加td1和txtValue1变量
input = document.getElementById("myInput");
filter = input.value.toUpperCase(); // 将输入转换为大写,实现不区分大小写的搜索
table = document.getElementById("myTable");
tr = table.getElementsByTagName("tr");
// 遍历所有表格行
// 注意:从索引1开始遍历,跳过表头行
for (i = 1; i < tr.length; i++) { // 从1开始,跳过表头行
// 获取当前行的第一个<td>元素 (Name列)
td0 = tr[i].getElementsByTagName("td")[0];
// 获取当前行的第二个<td>元素 (Country列)
td1 = tr[i].getElementsByTagName("td")[1];
if (td0 && td1) { // 确保两列都存在
txtValue0 = td0.textContent || td0.innerText; // 获取Name列文本内容
txtValue1 = td1.textContent || td1.innerText; // 获取Country列文本内容
// 检查任一列的文本内容是否包含搜索关键词
if (txtValue0.toUpperCase().indexOf(filter) > -1 || txtValue1.toUpperCase().indexOf(filter) > -1) {
tr[i].style.display = ""; // 匹配成功,显示该行
} else {
tr[i].style.display = "none"; // 不匹配,隐藏该行
}
} else {
// 如果行中没有足够的td元素,则隐藏该行或根据需求处理
tr[i].style.display = "none";
}
}
}
</script>代码解析:
-
变量声明更新: 增加了 td1 和 txtValue1 两个变量,分别用于存储第二列的
元素和其文本内容。 - 获取多列数据:
- td0 = tr[i].getElementsByTagName("td")[0]; 仍然获取第一列(Name)。
- td1 = tr[i].getElementsByTagName("td")[1]; 新增了对第二列(Country)的获取。
- 条件判断优化:
- if (td0 && td1):在尝试获取文本内容之前,先检查 td0 和 td1 是否都存在,以避免潜在的错误。
- txtValue0 = td0.textContent || td0.innerText; 和 txtValue1 = td1.textContent || td1.innerText; 分别获取两列的文本内容。
- if (txtValue0.toUpperCase().indexOf(filter) > -1 || txtValue1.toUpperCase().indexOf(filter) > -1):这是实现多列搜索的关键。它使用逻辑或(||)运算符,表示只要 txtValue0 包含搜索关键词 或者 txtValue1 包含搜索关键词,该行就应该显示。
- 循环起始点: 将 for 循环的起始索引从 0 改为 1 (for (i = 1; i 或 .header 类所在的表头行,确保只对数据行进行筛选。如果表头行也被 tr 集合包含,且其 display 属性被错误修改,可能会导致显示问题。
完整示例
将上述修改后的J*aScript代码嵌入到HTML页面中,即可实现多列搜索功能。
<!DOCTYPE html> <html> <head> <title>HTML表格多列搜索</title> <style> body { font-family: Arial, sans-serif; } #myInput { width: 300px; padding: 10px; margin-bottom: 15px; border: 1px solid #ddd; border-radius: 4px; } #myTable { width: 100%; border-collapse: collapse; margin-top: 10px; } #myTable th, #myTable td { border: 1px solid #ddd; padding: 8px; text-align: left; } #myTable .header th { background-color: #f2f2f2; font-weight: bold; } </style> </head> <body> <h2>HTML表格多列搜索示例</h2> <input type="text" id="myInput" onkeyup="myFunction()" placeholder="搜索姓名或国家..."> <table id="myTable"> <tr class="header"> <th style="width:60%;">Name</th> <th style="width:40%;">Country</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> <tr> <td>Magazzini Alimentari Riuniti</td> <td>Italy</td> </tr> <tr> <td>North/South</td> <td>UK</td> </tr> </table> <script> function myFunction() { var input, filter, table, tr, td0, td1, i, txtValue0, txtValue1; input = document.getElementById("myInput"); filter = input.value.toUpperCase(); table = document.getElementById("myTable"); tr = table.getElementsByTagName("tr"); // 遍历所有数据行(跳过表头行,假设表头是第一个tr) for (i = 1; i < tr.length; i++) { // 从索引1开始遍历 td0 = tr[i].getElementsByTagName("td")[0]; // 获取第一列 td1 = tr[i].getElementsByTagName("td")[1]; // 获取第二列 if (td0 && td1) { // 确保两列都存在 txtValue0 = td0.textContent || td0.innerText; txtValue1 = td1.textContent || td1.innerText; // 检查任一列是否包含搜索关键词 if (txtValue0.toUpperCase().indexOf(filter) > -1 || txtValue1.toUpperCase().indexOf(filter) > -1) { tr[i].style.display = ""; // 显示该行 } else { tr[i].style.display = "none"; // 隐藏该行 } } else { // 如果行没有足够的td元素,则隐藏 tr[i].style.display = "none"; } } } </script> </body> </html>进一步的思考与注意事项
-
处理更多列: 如果需要搜索的列更多,可以通过循环遍历 tr[i].getElementsByTagName("td") 集合来动态获取所有
元素,并构建一个包含所有列文本的字符串,或者在循环内部使用多个 || 条件。 // 示例:遍历所有td元素进行搜索 // ... (其他变量声明和初始化) // for (i = 1; i < tr.length; i++) { // var rowMatch = false; // var tds = tr[i].getElementsByTagName("td"); // for (var j = 0; j < tds.length; j++) { // var cellText = tds[j].textContent || tds[j].innerText; // if (cellText.toUpperCase().indexOf(filter) > -1) { // rowMatch = true; // break; // 找到匹配项,无需检查其他td // } // } // if (rowMatch) { // tr[i].style.display = ""; // } else { // tr[i].style.display = "none"; // } // }- 性能考量: 对于非常大的表格(例如,数千行),客户端J*aScript搜索可能会导致性能下降。在这种情况下,考虑使用服务器端搜索、分页或虚拟滚动等技术。
- 用户体验:
- 提供清晰的 placeholder 文本,告知用户可以搜索哪些内容。
- 考虑添加一个清除搜索按钮。
- 在搜索结果为空时,可以显示一个“无结果”的提示。
- 不区分大小写: 通过将用户输入和单元格内容都转换为大写(toUpperCase())来实现不区分大小写的搜索,这是良好的实践。
- 兼容性: textContent 和 innerText 属性在不同浏览器中可能有所差异,使用 td.textContent || td.innerText 是一种常见的兼容性写法。
总结
通过上述步骤,我们成功地将一个基础的单列HTML表格搜索功能扩展为支持多列搜索。核心在于正确获取目标列的数据,并利用J*aScript的逻辑或(||)运算符在条件判断中包含所有需要搜索的列。这种方法简单高效,适用于大多数客户端表格筛选场景,显著提升了用户查找数据的便利性。
- 获取多列数据:
以上就是实现HTML表格多列搜索功能指南的详细内容,更多请关注其它相关文章!
# 转换为
# 揭阳网站内页优化
# 根河网站建设公司
# 宝安区营销推广厂家
# 重庆网站建设官网
# 宁夏网站推广宣传
# 微信seo 怎么操作
# 厦门推广营销现状调查
# 山东视频网站建设推广价格
# 重庆网站建设网络推广
# 五金店要怎么做营销推广
# 跳过
# 如何使用
# javascript
# 这是
# 如何实现
# 运算符
# 第一个
# 遍历
# 搜索功能
# 爱多
# red
# 浏览器
# html
# java
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比
J*aScript对象创建方式_J*aScript设计模式应用
Django通过AJAX异步上传图片并保存至模型的完整指南
ArchiveofOurOwn小说阅读-ArchiveofOurOwn同人作品访问链接
神庙逃亡小游戏在线玩 神庙逃亡小游戏入口
顺丰快递查单号物流信息 顺丰快递小程序查询入口
精准捕获:如何在页面中监听除特定元素外的所有点击事件
为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法
网易大神账号申诉需要多久_网易大神账号申诉流程说明
印象笔记如何设离线包出差查阅_印象笔记设离线包出差查阅【离线阅读】
Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值
Excel Power Pivot如何处理XML数据源 构建高级数据模型
漫蛙2漫画入口 漫蛙正版网页漫画直达网址
Golang指针如何与map组合使用_Golang map指针组合实践
Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量
DLsite中文平台入口 DLsite官网内容在线查看
iwriter统一登录平台 iwrite账号密码登录页面
机器学习中对数变换预测结果的反向还原
谷歌google账号注册详细步骤 谷歌账号注册官方教程
yy漫画网页版官方入口_yy漫画官网登录页面链接
C++如何实现单例模式_C++设计模式之线程安全的单例写法
Lar*el 8 多关键词数据库搜索优化实践
如何使用J*aScript精确选择并批量修改特定父元素下子链接的样式
Eclipse怎么运行工程_Eclipse工程运行配置说明
怎么在html里运行vbs脚本_html中运行vbs脚本方法【教程】
Go语言中动态执行代码字符串的策略与实践
composer的"require-dev"部分是用来做什么的?
Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】
铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧
yandex入口引擎手机版 yandex安卓版下载入口
Gmail邮箱申请注册直达_Gmail邮箱免费注册PC版官网入口2025
《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元
QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网
如何使 Jest 模拟函数默认抛出错误以提高测试效率
C++ explicit关键字防止隐式转换_C++构造函数安全规范
Go语言HTML解析:利用Goquery精准获取指定元素内容
抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明
Angular中父组件异步更新子组件复选框状态的实践指南
fishbowl官网免费版 fishbowl养鱼网站入口
期待已久:小米17 Ultra、小米首款NAS本月登场
解决Flask中Quill编辑器内容提交失败及TypeError的指南
J*a递归快速排序中静态变量导致数据累积问题的解决方案
PDF怎么合并PDF并保持格式_PDF合并文件保持排版教程
excel如何生成目录 excel一键生成工作表目录超链接
红果短剧网页版官网入口 官方最新网址发布
如何在Promise链中优雅地中断后续then执行
谷歌推RCS信息存档功能:公司可监控员工私密信息!
在Blazor WebAssembly应用中动态注入客户端特定指标代码的策略
铁路12306的积分有效期是多久_铁路12306积分有效期说明
Win11怎么设置鼠标指针速度_Win11提高鼠标指针精确度选项


2025-10-19
浏览次数:次
返回列表