
本教程详细介绍了如何利用javascript实现网页表格的实时搜索过滤功能,无需用户按下回车键即可动态更新显示结果。文章涵盖了html结构、css样式以及两种javascript实现方案:一种是现代简洁的事件监听方法,另一种是传统的`onkeyup`函数方法,并提供了代码示例和关键注意事项,帮助开发者构建高效的用户界面。
在现代Web应用中,用户经常需要从大量数据中快速查找特定信息。对于以表格形式展示的数据,提供一个实时搜索过滤功能可以极大地提升用户体验。本文将指导您如何使用纯JavaScript在客户端实现这一功能,当用户在搜索框中输入内容时,表格数据会即时根据输入进行筛选,而无需点击任何按钮或按下回车键。
实时搜索过滤的核心原理是监听搜索输入框的输入事件,每当输入框内容发生变化时,就遍历表格中的每一行数据。对于每一行,检查其特定列的内容是否包含搜索关键词。如果包含,则显示该行;如果不包含,则隐藏该行。
首先,我们需要一个搜索输入框和一个用于展示数据的HTML表格。表格的结构应包含表头(zuojiankuohaophpcnthead>)和表体(<tbody>),这有助于更好地组织内容和提高可访问性。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>实时表格搜索过滤</title>
<link rel="stylesheet" href="style.css"> <!-- 引入CSS样式 -->
</head>
<body>
<!-- 搜索输入框 -->
<input type="text" id="myInput" placeholder="在此搜索..." title="输入关键词进行搜索" autocomplete="off" />
<!-- 数据表格 -->
<table id="myTable">
<thead>
<tr class="header">
<th>Id</th>
<th>Bin</th>
<th>Tür</th>
<th>Banka Adı</th>
<th>Type</th>
<th>Name</th>
<th>Oluşturma Tarihi</th>
<th>Güncelleme Tarihi</th>
</tr>
</thead>
<tbody>
<!-- 以下是示例数据行,实际数据可以通过后端PHP或JS动态加载 -->
<tr>
<td>1</td>
<td>123456</td>
<td>类型A</td>
<td>银行X</td>
<td>Category1</td>
<td>产品名称A</td>
<td>2023-01-01</td>
<td>2023-01-02</td>
</tr>
<tr>
<td>2</td>
<td>654321</td>
<td>类型B</td>
<td>银行Y</td>
<td>Category2</td>
<td>服务项目B</td>
<td>2023-01-03</td>
<td>2023-01-04</td>
</tr>
<tr>
<td>3</td>
<td>987654</td>
<td>类型A</td>
<td>银行Z</td>
<td>Category1</td>
<td>解决方案C</td>
<td>2023-01-05</td>
<td>2023-01-06</td>
</tr>
<!-- 更多数据行... -->
</tbody>
</table>
<script src="script.js"></script> <!-- 引入JavaScript文件 -->
</body>
</html>关于数据填充: 在实际应用中,表格数据通常来自后端API(例如通过PHP获取JSON数据)。您可以使用PHP或其他后端语言将数据动态地填充到<tbody>标签中。例如,原始问题中的PHP代码片段展示了如何从JSON URL获取数据并将其渲染为表格行。这里我们使用静态示例数据来演示JavaScript过滤逻辑。
<?php
// 假设这是您的PHP代码,用于从API获取数据并渲染表格
$json_url = "websitename"; // 替换为您的API地址
$json = file_get_contents($json_url);
$data = json_decode($json, TRUE);
echo "<table id='myTable'>";
echo "<thead>";
echo "<tr class='header'>";
echo "<th>Id</th><th>Bin</th><th>Tür</th><th>Banka Adı</th><th>Type</th><th>Name</th><th>Oluşturma Tarihi</th><th>Güncelleme Tarihi</th>";
echo "</tr>";
echo "</thead>";
echo "<tbody>";
foreach($data as $record) {
echo "<tr>";
echo "<td>" . htmlspecialchars($record["id"]) . "</td>";
echo "<td>" . htmlspecialchars($record["bin"]) . "</td>";
echo "<td>" . htmlspecialchars($record["tur"]) . "</td>";
echo "<td>" . htmlspecialchars($record["banka_adi"]) . "</td>";
echo "<td>" . htmlspecialchars($record["type"]) . "</td>";
echo "<td>" . htmlspecialchars($record["name"]) . "</td>";
echo "<td>" . htmlspecialchars($record["created_at"]) . "</td>";
echo "<td>" . htmlspecialchars($record["updated_at"]) . "</td>";
echo "</tr>";
}
echo "</tbody>";
echo "</table>";
?>为了使表格和搜索框具有更好的视觉效果,可以添加一些基本的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;
}我们将介绍两种JavaScript实现方法。
这种方法使用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);
}
});
});
});代码解释:
这种方法与原始问题中尝试的方法类似,通过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()"
// <input type="text" id="myInput" onkeyup="myFunction()" placeholder="在此搜索..." title="输入关键词进行搜索" autocomplete="off" />代码解释:
通过本教程,您应该已经掌握了两种在网页表格中实现实时搜索过滤的方法。推荐使用现代的addEventListener('input')配合row.hidden属性的方法,因为它更简洁、更高效且能捕获所有输入变化。选择适合您项目需求的方法,并结合最佳实践,可以为用户提供一个流畅、高效的数据查找体验。
以上就是实现基于JavaScript的实时表格搜索过滤功能教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号