
本教程详细介绍了如何利用javascript、html和css构建一个交互式搜索功能。通过实时监听用户输入,该功能能够动态过滤列表项,并对匹配的关键词进行高亮显示,从而显著提升用户在大量数据中查找信息的效率和体验。
在现代Web应用中,为用户提供高效的数据搜索和筛选能力是提升用户体验的关键。本教程将引导您从零开始,使用纯JavaScript、HTML和CSS实现一个功能完善的动态搜索框。该搜索框不仅能根据用户的输入实时过滤列表内容,还能将匹配的文本片段高亮显示,使用户一目了然地找到所需信息。
我们将实现以下两个主要功能:
首先,我们需要一个基本的HTML结构,包含一个搜索输入框和一个用于展示列表项的无序列表。
<main>
<input type="search" name="search_box" id="search-box" class="search_box" placeholder="搜索大学..." />
<h1 class="title">世界顶尖大学列表</h1>
<ul class="world-universities_list" id="world-universities_list">
<li class="university">Massachusetts Institute of Technology (MIT)</li>
<li class="university">Stanford University</li>
<li class="university">Harvard University</li>
<li class="university">California Institute of Technology (Caltech)</li>
<li class="university">University of Oxford</li>
<li class="university">University of Cambridge</li>
<li class="university">University of Chicago</li>
<li class="university">ETH Zurich - Swiss Federal Institute of Technology</li>
<li class="university">University of California, Berkeley (UCB)</li>
<li class="university">Aalborg University (Denmark)</li>
<li class="university">Aalto University (Finland)</li>
<li class="university">Aarhus University (Denmark)</li>
<li class="university">Abdullah Gül University (Turkey)</li>
<li class="university">Abertay University (United Kingdom)</li>
<li class="university">Aberystwyth University (United Kingdom)</li>
<li class="university">Abia State University (Nigeria)</li>
<li class="university">Abilene Christian University (United States)</li>
<li class="university">Adam Mickiewicz University (Poland)</li>
<li class="university">Addis Ababa University (Ethiopia)</li>
<li class="university">Adelphi University (United States)</li>
<li class="university last-u">Princeton University</li>
</ul>
</main>在上述代码中:
立即学习“Java免费学习笔记(深入)”;
为了使高亮效果可见,我们需要定义一个.highlight CSS类。同时,我们也会添加一些基础样式以提高页面的可读性。
body {
margin: 0;
padding: 0;
font-family: 'Poppins', sans-serif;
}
*, *::before, ::after {
padding: 0;
margin: 0;
box-sizing: border-box;
}
ul {
list-style-type: none;
padding: 0;
margin: 0;
}
main {
background-color: rgb(255, 255, 255);
margin: 1.5rem;
display: flex;
flex-direction: column;
}
.title {
text-align: center;
color: rgb(221, 4, 58);
font-weight: 600;
font-family: 'Poppins', sans-serif;
font-size: 2rem;
margin-top: 2rem;
}
.search_box {
display: block;
width: 100%;
height: 2rem;
border-radius: 0.5rem;
border: 1.5px solid #0000002c;
margin-top: 2rem;
outline: none;
padding: 2px;
}
.world-universities_list {
background-color: rgb(104, 7, 39);
color: white;
padding: 1.5rem;
border-radius: 1rem;
margin-top: 3rem;
}
.university:not(.last-u) {
margin-bottom: 2rem;
}
/* 关键词高亮样式 */
.highlight {
background-color: aqua; /* 突出显示背景色 */
font-weight: bold; /* 字体加粗 */
color: black; /* 确保高亮文本清晰可见 */
}最关键的样式是.highlight,它定义了匹配文本的背景色和字体粗细。您可以根据设计需求调整这些属性。
这是实现动态搜索和高亮的核心部分。我们将使用JavaScript来监听用户输入,并根据输入内容操作DOM。
const searchBox = document.getElementById("search-box");
const universities = document.querySelectorAll(".university");
const searchUniversity = () => {
searchBox.addEventListener("keyup", () => {
// 1. 获取并标准化搜索框输入
const searchBoxInput = searchBox.value.toLowerCase(); // 转换为小写
const noWhiteSpaceInput = searchBoxInput.replace(/\s/g, ""); // 移除所有空格
universities.forEach((university) => {
const universityName = university.textContent.toLowerCase().replace(/\s/g, ""); // 标准化大学名称
// 2. 过滤功能:根据输入显示或隐藏列表项
if (universityName.includes(noWhiteSpaceInput)) {
university.style.display = "block"; // 显示匹配的项
} else {
university.style.display = "none"; // 隐藏不匹配的项
}
// 3. 高亮功能:将匹配的文本高亮显示
// 创建正则表达式,'g'表示全局匹配,'i'表示不区分大小写
const regex = new RegExp(`(${noWhiteSpaceInput})`, "gi");
// 使用replace方法将匹配的文本用<span>标签包裹起来
// $1 是正则表达式中第一个捕获组(即括号内的内容)
const highlightedText = university.textContent.replace(regex, "<span class='highlight'>$1</span>");
university.innerHTML = highlightedText; // 更新列表项的HTML内容
});
});
};
searchUniversity();获取DOM元素:
事件监听:
标准化输入:
过滤功能:
高亮功能:
为了方便您测试,这里是所有代码的整合:
index.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>动态搜索与高亮教程</title>
<link rel="stylesheet" href="style.css">
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap" rel="stylesheet">
</head>
<body>
<main>
<input type="search" name="search_box" id="search-box" class="search_box" placeholder="搜索大学..." />
<h1 class="title">世界顶尖大学列表</h1>
<ul class="world-universities_list" id="world-universities_list">
<li class="university">Massachusetts Institute of Technology (MIT)</li>
<li class="university">Stanford University</li>
<li class="university">Harvard University</li>
<li class="university">California Institute of Technology (Caltech)</li>
<li class="university">University of Oxford</li>
<li class="university">University of Cambridge</li>
<li class="university">University of Chicago</li>
<li class="university">ETH Zurich - Swiss Federal Institute of Technology</li>
<li class="university">University of California, Berkeley (UCB)</li>
<li class="university">Aalborg University (Denmark)</li>
<li class="university">Aalto University (Finland)</li>
<li class="university">Aarhus University (Denmark)</li>
<li class="university">Abdullah Gül University (Turkey)</li>
<li class="university">Abertay University (United Kingdom)</li>
<li class="university">Aberystwyth University (United Kingdom)</li>
<li class="university">Abia State University (Nigeria)</li>
<li class="university">Abilene Christian University (United States)</li>
<li class="university">Adam Mickiewicz University (Poland)</li>
<li class="university">Addis Ababa University (Ethiopia)</li>
<li class="university">Adelphi University (United States)</li>
<li class="university last-u">Princeton University</li>
</ul>
</main>
<script src="script.js"></script>
</body>
</html>style.css
body {
margin: 0;
padding: 0;
font-family: 'Poppins', sans-serif;
}
*, *::before, ::after {
padding: 0;
margin: 0;
box-sizing: border-box;
}
ul {
list-style-type: none;
padding: 0;
margin: 0;
}
main {
background-color: rgb(255, 255, 255);
margin: 1.5rem;
display: flex;
flex-direction: column;
}
.title {
text-align: center;
color: rgb(221, 4, 58);
font-weight: 600;
font-family: 'Poppins', sans-serif;
font-size: 2rem;
margin-top: 2rem;
}
.search_box {
display: block;
width: 100%;
height: 2rem;
border-radius: 0.5rem;
border: 1.5px solid #0000002c;
margin-top: 2rem;
outline: none;
padding: 2px;
}
.world-universities_list {
background-color: rgb(104, 7, 39);
color: white;
padding: 1.5rem;
border-radius: 1rem;
margin-top: 3rem;
}
.university:not(.last-u) {
margin-bottom: 2rem;
}
.highlight {
background-color: aqua;
font-weight: bold;
color: black;
}script.js
const searchBox = document.getElementById("search-box");
const universities = document.querySelectorAll(".university");
const searchUniversity = () => {
searchBox.addEventListener("keyup", () => {
const searchBoxInput = searchBox.value.toLowerCase();
const noWhiteSpaceInput = searchBoxInput.replace(/\s/g, "");
universities.forEach((university) => {
// 存储原始文本内容,用于高亮显示
const originalText = university.textContent;
const universityNameProcessed = originalText.toLowerCase().replace(/\s/g, "");
// 过滤逻辑
if (universityNameProcessed.includes(noWhiteSpaceInput)) {
university.style.display = "block";
} else {
university.style.display = "none";
}
// 高亮逻辑
// 只有当有搜索输入时才进行高亮
if (noWhiteSpaceInput.length > 0) {
const regex = new RegExp(`(${noWhiteSpaceInput})`, "gi");
const highlightedText = originalText.replace(regex, "<span class='highlight'>$1</span>");
university.innerHTML = highlightedText;
} else {
// 如果搜索框为空,则恢复原始文本,移除所有高亮
university.innerHTML = originalText;
}
});
});
};
searchUniversity();通过本教程,您已经学会了如何使用JavaScript、HTML和CSS构建一个实用的动态搜索和高亮功能。这不仅提升了用户在大型数据集中查找信息的效率,也增强了Web应用的交互性和用户体验。掌握这种技术是现代前端开发中一项重要的技能。您可以基于此基础进行扩展,例如添加排序、筛选、模糊搜索等更高级的功能。
以上就是JavaScript实现动态搜索过滤与关键词高亮显示的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号