构建一个简单的搜索功能

JavaScriptJavaScriptBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个项目中,你将学习如何使用 JavaScript 实现一个简单的搜索功能。你将学习如何将输入事件绑定到输入框、处理搜索数据以及显示搜索结果。

👀 预览

搜索功能演示

🎯 任务

在这个项目中,你将学习:

  • 如何将 input 事件绑定到输入框
  • 如何实现 handleInput 方法来过滤搜索数据
  • 如何在列表中渲染搜索结果

🏆 成果

完成这个项目后,你将能够:

  • 使用 addEventListener 方法绑定事件
  • 使用 filter 方法根据条件过滤数组
  • 操作 DOM 以更新搜索结果

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript(("JavaScript")) -.-> javascript/DOMManipulationGroup(["DOM Manipulation"]) javascript/BasicConceptsGroup -.-> javascript/functions("Functions") javascript/BasicConceptsGroup -.-> javascript/array_methods("Array Methods") javascript/AdvancedConceptsGroup -.-> javascript/async_prog("Asynchronous Programming") javascript/AdvancedConceptsGroup -.-> javascript/template_lit("Template Literals") javascript/DOMManipulationGroup -.-> javascript/dom_select("DOM Selection") javascript/DOMManipulationGroup -.-> javascript/dom_manip("DOM Manipulation") javascript/DOMManipulationGroup -.-> javascript/event_handle("Event Handling") javascript/DOMManipulationGroup -.-> javascript/dom_traverse("DOM Traversal") subgraph Lab Skills javascript/functions -.-> lab-299859{{"构建一个简单的搜索功能"}} javascript/array_methods -.-> lab-299859{{"构建一个简单的搜索功能"}} javascript/async_prog -.-> lab-299859{{"构建一个简单的搜索功能"}} javascript/template_lit -.-> lab-299859{{"构建一个简单的搜索功能"}} javascript/dom_select -.-> lab-299859{{"构建一个简单的搜索功能"}} javascript/dom_manip -.-> lab-299859{{"构建一个简单的搜索功能"}} javascript/event_handle -.-> lab-299859{{"构建一个简单的搜索功能"}} javascript/dom_traverse -.-> lab-299859{{"构建一个简单的搜索功能"}} end

设置项目结构

在这一步中,你将设置项目文件和结构。按照以下步骤完成此步骤:

打开项目文件夹。目录结构如下:

├── css
│   └── style.css
├── index.html
└── js
    └── index.js

其中:

  • index.html 是主页。
  • css 是用于存储项目样式的文件夹。
  • js/index.js 是你需要添加代码的 JavaScript 文件。

点击 WebIDE 右下角的 Go Live 按钮来运行项目。

接下来,在虚拟机顶部打开 “Web 8080” 并手动刷新,你将看到页面。

渲染搜索结果

在这一步中,你将实现 render 方法来显示搜索结果。

  1. js/index.js 文件中,找到 search 对象中的 render 方法。
  2. render 方法内部,添加以下代码以生成搜索结果的 HTML 模板并更新 listEl 元素:
const template = this.data.reduce(
  (prev, next) => prev + `<li>${next.content}</li>`,
  ""
);
this.listEl.innerHTML = template;

reduce 方法用于创建一个 HTML 模板字符串,该字符串显示 data 数组中每个项目的 content 属性。

实现 handleInput 方法

在这一步中,你将实现 handleInput 方法来处理搜索功能。

  1. js/index.js 文件中,找到 search 对象中的 handleInput 方法。
  2. handleInput 方法内部,添加以下代码以根据输入值过滤 data 数组,然后渲染搜索结果:
const value = e.target.value;
// 使用定时器模拟 ajax 发送请求、接收数据
setTimeout(() => {
  this.data = !!value
    ? data.filter((val) => val.content.indexOf(value) !== -1)
    : [];
  this.render();
});

setTimeout 函数用于模拟异步操作,比如 AJAX 请求,以接收搜索数据。

绑定输入事件

在这一步中,你将学习如何将 input 事件绑定到输入框,并在输入框的值发生变化时调用 handleInput 方法。

  1. 打开 js/index.js 文件。
  2. search 对象中找到 handle 函数。
  3. handle 函数内部,添加以下代码将 input 事件绑定到 inputEl 元素,并调用 handleInput 方法:
this.inputEl.addEventListener("input", this.handleInput.bind(this));

bind(this) 部分很重要,它确保 handleInput 方法内部的 this 指向 search 对象本身。

完成这四个步骤后,js/index.js 文件现在应该具有搜索功能的完整实现,并且项目应该按预期工作。最终效果应如下所示:

搜索功能演示
✨ 查看解决方案并练习

总结

恭喜你!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。