
本文详细介绍了如何利用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免费学习笔记(深入)”;
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: #333;            /* 调整高亮文本颜色,使其更清晰 */
}JavaScript部分是实现动态搜索和高亮的核心。我们将监听搜索框的 keyup 事件,并在每次用户输入时执行过滤和高亮操作。
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. 高亮匹配文本
      // 创建一个正则表达式,用于查找所有匹配的关键词,不区分大小写
      const regex = new RegExp(`(${noWhiteSpaceInput})`, "gi");
      // 使用 replace 方法将匹配的关键词替换为带有 highlight 类的 span 标签
      // $1 是对正则表达式中第一个捕获组(即 `(${noWhiteSpaceInput})`)的引用
      const highlightedText = university.textContent.replace(regex, "<span class='highlight'>$1</span>");
      university.innerHTML = highlightedText; // 更新列表项的HTML内容
    });
  });
};
searchUniversity();获取DOM元素:
事件监听:
处理搜索输入:
遍历列表项:
过滤可见性:
高亮匹配文本:
通过结合简单的HTML结构、基础CSS样式和强大的JavaScript逻辑,我们成功实现了一个动态的搜索过滤和文本高亮功能。这个功能不仅提升了用户在大型数据集中查找信息的效率,也通过直观的高亮反馈增强了用户体验。您可以根据自己的项目需求,在此基础上进行扩展和优化,例如添加搜索结果计数、支持多关键词搜索等。
以上就是使用JavaScript实现动态搜索过滤与文本高亮显示的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
 
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号