使用原生JavaScript为搜索过滤器添加“无匹配结果”提示

使用原生JavaScript为搜索过滤器添加“无匹配结果”提示

本教程将指导您如何利用原生javascript,为一个基础搜索过滤器实现动态的“无匹配结果”提示功能。通过优化css隐藏策略(从`visibility: hidden`改为`display: none`)并引入javascript逻辑来判断过滤后的可见元素数量,我们能精确控制提示信息的显示与隐藏,从而提升用户体验,确保当搜索结果为空时,用户能收到明确的反馈。

在构建基于原生JavaScript的搜索过滤器时,一个常见的需求是在没有匹配结果时向用户显示一条提示信息。这不仅能优化用户体验,还能清晰地告知用户当前搜索状态。本教程将详细介绍如何实现这一功能,包括HTML结构、CSS优化以及核心JavaScript逻辑。

1. HTML结构准备

首先,我们需要在HTML中定义搜索输入框、待过滤的列表项,以及用于显示“无匹配结果”的提示信息元素。提示信息默认应处于隐藏状态。

搜索过滤器

@@##@@
自然风光
@@##@@
随机
@@##@@
科技
@@##@@
人物
@@##@@
动物
@@##@@
建筑

注意: 我们为提示信息

元素添加了 id=”mensaje” 和 class=”hidden”,以便通过JavaScript和CSS进行控制。

2. CSS优化与隐藏策略

为了确保被隐藏的元素不占用页面布局空间,我们推荐使用 display: none; 而不是 visibility: hidden;。visibility: hidden; 会使元素不可见但仍占据其原始空间,而 display: none; 则会将其完全从文档流中移除。

立即学习“Java免费学习笔记(深入)”;

.hidden {  display: none; /* 彻底隐藏元素,不占据空间 */  opacity: 0;    /* 配合过渡效果,确保平滑隐藏 */  order: 1;      /* 如果使用Flexbox或Grid,可用于排序 */}

我们将原本的 .filter 类名替换为更具语义化的 .hidden,并将其 visibility: hidden; 属性改为 display: none;。

3. JavaScript核心逻辑实现

核心逻辑在于监听搜索框的输入事件,根据输入内容过滤列表项,并在过滤完成后检查可见项的数量,从而决定是否显示“无匹配结果”提示。

const d = document;/** * 实现搜索过滤功能,并在无匹配结果时显示提示信息。 * @param {string} input - 搜索输入框的选择器。 * @param {string} selector - 待过滤列表项的选择器。 */export default function filtroBusqueda(input, selector) {  d.addEventListener("keyup", (e) => {    // 1. 检查事件源是否为目标搜索框,如果不是则提前返回    if (!e.target.matches(input)) return;    // 2. 如果按下的是Escape键,清空搜索框    if (e.key === "Escape") e.target.value = "";    // 3. 遍历所有列表项进行过滤    d.querySelectorAll(selector).forEach((elemento) => {      // 将元素文本内容转为小写,与搜索框值进行比较      const match = elemento.textContent.toLowerCase().includes(e.target.value.toLowerCase());      // 根据匹配结果添加或移除 'hidden' 类      if (match) {        elemento.classList.remove("hidden"); // 匹配成功,显示元素      } else {        elemento.classList.add("hidden");    // 匹配失败,隐藏元素      }    });    // 4. 判断并显示/隐藏“无匹配结果”提示    // 获取所有卡片元素中当前未被隐藏(即可见)的元素    const visibleResults = [...d.querySelectorAll(".card")].filter(      (elemento) => !elemento.classList.contains("hidden")    );    const mensajeElement = d.querySelector("#mensaje"); // 获取提示信息元素    if (visibleResults.length) {      // 如果有可见结果,则隐藏提示信息      mensajeElement.classList.add("hidden");    } else {      // 如果没有可见结果,则显示提示信息      mensajeElement.classList.remove("hidden");    }  });}

代码解析:

事件监听与提前返回: d.addEventListener(“keyup”, …) 监听键盘抬起事件。if (!e.target.matches(input)) return; 是一个重要的优化,它确保只有当事件源是搜索输入框时才执行后续逻辑,避免不必要的计算。清空搜索框: if (e.key === “Escape”) e.target.value = “”; 允许用户通过按下 Escape 键快速清空搜索框内容。元素过滤: d.querySelectorAll(selector).forEach(…) 遍历所有待过滤的卡片元素。通过比较元素的 textContent 和搜索框的值(都转换为小写以实现不区分大小写的搜索),来决定是移除还是添加 hidden 类。判断无匹配结果:[…d.querySelectorAll(“.card”)] 将所有卡片元素转换为数组。.filter((elemento) => !elemento.classList.contains(“hidden”)) 筛选出那些不包含 hidden 类的元素,即当前可见的元素。visibleResults.length 用于判断可见元素的数量。如果数量大于0,说明有匹配结果,则隐藏“无匹配结果”提示 (mensajeElement.classList.add(“hidden”));否则,显示提示 (mensajeElement.classList.remove(“hidden”))。

4. 整合与调用

在你的主JavaScript文件(例如 index.js)中,确保在DOM加载完成后调用 filtroBusqueda 函数。

// index.jsimport filtroBusqueda from './filtro_de_busqueda.js'; // 假设你的过滤函数在 filtro_de_busqueda.js 中const d = document;d.addEventListener('DOMContentLoaded', e => {    // 调用过滤函数,传入搜索框和卡片的选择器    filtroBusqueda('.card-filter', '.card');});

确保你的HTML文件正确地以 type=”module” 引入了 index.js:


5. 总结与最佳实践

通过上述步骤,我们成功地为原生JavaScript搜索过滤器添加了“无匹配结果”提示功能。在实现过程中,我们遵循了以下最佳实践:

语义化类名: 使用 hidden 而不是 filter 更清晰地表达了类的作用。正确的隐藏方式: 优先使用 display: none; 来彻底隐藏元素并移除其布局空间。性能优化: 使用 e.target.matches(input) 进行早期返回,避免在不相关的键盘事件上执行过滤逻辑。用户体验: 提供清晰的“无匹配结果”提示,增强了搜索功能的可用性。

这种方法不仅适用于简单的卡片列表,也可以扩展到更复杂的过滤场景,为用户提供更直观、友好的交互体验。

natureanytechpeopleanimalsarch

以上就是使用原生JavaScript为搜索过滤器添加“无匹配结果”提示的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1601725.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月23日 15:44:25
下一篇 2025年12月13日 17:28:45

相关推荐

  • JavaScript键盘事件处理:精确控制输入框选择与字符输入

    本文深入探讨了在使用javascript键盘事件监听器选择文本输入框时,如何避免因事件执行顺序导致的意外字符输入问题。通过对比`keydown`和`keyup`事件的行为差异,揭示了键盘事件的完整序列,并提供了利用`keyup`事件实现精确控制的解决方案,同时涵盖了在特定场景下允许输入字符的高级处理…

    好文分享 2025年12月23日
    000
  • html怎么用浏览器运行php_浏览器运html中php文件方法【教程】

    正确答案是搭建本地开发环境。需安装XAMPP等集成工具,将.php文件放入htdocs目录,通过http://localhost访问,确保服务器解析PHP并返回HTML给浏览器显示。 PHP 是服务器端语言,不能直接通过浏览器像 HTML 那样双击打开运行。你看到的“在浏览器中运行 PHP”其实是指…

    2025年12月23日
    000
  • JavaScript中querySelector与表单提交事件的精确理解

    本文旨在澄清javascript中`document.queryselector(‘form’)`的用法及其与表单提交事件的关系。我们将详细解释`queryselector`如何精确选取dom元素,并阐明`submit`事件是表单特有的行为,而非直接针对表单内部的按钮。通过示…

    2025年12月23日
    000
  • 从Google云端硬盘恢复被转换为Google文档的原始HTML文件

    当html文件上传至google云端硬盘后被自动转换为google文档(gdoc),导致无法直接下载原始html内容时,用户可通过google文档的版本历史功能,找到并查看文件的初始上传版本,从而成功下载原始html文件。 在使用Google云端硬盘存储文件时,用户可能会遇到一种常见情况:上传的HT…

    2025年12月23日
    000
  • React中基于用户输入动态过滤列表元素的实践指南

    本教程详细介绍了如何在react应用中实现基于用户输入的动态列表过滤功能。通过利用react的状态管理机制,我们将演示如何实时响应用户输入,对数据列表进行筛选,并高效地渲染过滤后的结果,从而提升用户体验,特别适用于聊天用户列表、商品目录等场景。 在现代Web应用开发中,动态过滤列表是提升用户体验的关…

    2025年12月23日
    000
  • 修复JavaScript动态设置CSS背景图片时的404错误

    当在JavaScript中动态设置CSS backgroundImage属性时,常见的404错误通常源于对CSS url()函数语法的不正确使用以及文件路径解析的误解。本文将详细阐述如何在JavaScript中正确构建CSS url()字符串,确保路径引用准确无误,并结合文件结构解析相对路径,从而有…

    2025年12月23日
    000
  • vs2022编写html怎么运行_vs2022编写html运行步骤【指南】

    在VS2022中运行HTML需创建ASP.NET项目,将HTML文件添加至wwwroot目录;2. 通过设置启动路径为index.html并启用IIS Express,按F5即可在浏览器查看;3. 原生不支持直接预览,可安装“Web Browser Preview”扩展实现快速查看;4. 适合结合后…

    2025年12月23日
    000
  • html文件怎么在vs中运行_vs中运行html文件步骤【指南】

    可通过三种方法在Visual Studio中运行HTML文件:一、创建ASP.NET项目,添加HTML文件并设为起始页,按Ctrl+F5使用IIS Express运行;二、在VS Code中安装Live Server扩展,右键HTML文件选择“在Live Server上打开”实现实时预览;三、在Vi…

    2025年12月23日
    000
  • 如何实现基于图片尺寸的浮层自动适配与响应式布局

    本教程详细讲解如何使用css实现浮层(overlay)内容自动适配其下方图片尺寸的响应式布局。通过调整定位属性和巧妙运用`inset`,确保浮层与图片完美对齐并同步调整大小。同时,文章还提供了使用背景图片作为替代方案,以应对不同布局需求,确保内容在视觉上的一致性和专业性。 在网页设计中,经常需要在图…

    2025年12月23日
    000
  • 在Flask应用中正确提交和获取Quill编辑器内容的教程

    本教程旨在解决在使用quill富文本编辑器时,通过隐藏字段将内容提交至flask后端时遇到的常见问题。核心在于纠正javascript中对dom元素的错误选择方式,即区分`document.queryselector()`和`document.getelementbyid()`的正确用法。通过修复前…

    2025年12月23日
    000
  • CSS选择器:精准定位容器内首个顶级blockquote

    本文旨在解决一个常见的CSS选择器难题:如何在特定容器内精确选中第一个非嵌套的` `元素,同时排除所有嵌套在其内部的子“元素,无论其嵌套深度如何。文章将深入分析传统选择器方法的局限性,并详细阐述如何巧妙运用`:not()`伪类结合后代选择器,实现对容器内“顶级”“元素的精准定…

    2025年12月23日
    000
  • CSS中重叠区域的样式控制指南

    本教程旨在探讨如何使用css精确控制两个重叠div的交集区域样式。我们将从调整单个重叠元素的背景色这一基础方法入手,深入讲解其原理和局限性。随后,文章将引入更高级的css技术,如`mix-blend-mode`,以实现复杂的混合效果,并探讨伪元素及其他高级属性在创建独立重叠层方面的应用。教程将提供示…

    2025年12月23日
    000
  • JavaScript教程:将Base64图片转换为ImageData数组

    本文详细介绍了在javascript中如何将base64编码的图片字符串转换为imagedata数组。通过利用image对象和html canvas api,我们将学习如何解码base64数据,将其绘制到画布上,并最终提取出包含原始像素数据(rgba值)的一维数组,并提供实用的代码示例进行指导。 在…

    2025年12月23日
    000
  • 使用原生HTML和JavaScript限制日期输入框的选择范围

    本文详细介绍了如何利用原生html的`input[type=”date”]`元素及其`min`和`max`属性,结合javascript动态计算日期,来限制用户只能选择特定时间范围内的日期。教程涵盖了日期计算逻辑、格式化要求以及完整的代码示例,旨在帮助开发者实现精确的日期输入…

    2025年12月23日
    000
  • 解决JavaScript定时跳转锚点定位不准:模拟用户导航行为的策略

    针对javascript定时器触发页面锚点跳转导致定位不准确的问题,本文深入分析了其与手动点击导航链接行为差异的根本原因。核心解决方案是避免直接修改window.location.href来触发浏览器默认锚点跳转,而是通过模拟用户点击相应导航链接或调用底层导航函数,以确保页面按预期平滑滚动并保持ur…

    2025年12月23日
    000
  • 解决Vue.js中图片无法显示的常见问题:理解挂载范围与ID唯一性

    本文旨在解决vue.js应用中图片无法正确显示的问题,即使url和数据绑定看似无误。核心原因在于vue应用挂载机制的作用域限制以及html id属性的唯一性原则。我们将通过分析错误示例、提供正确代码及最佳实践,帮助开发者理解如何确保图片等动态内容在vue组件内部正确渲染,避免因dom结构和id重复导…

    2025年12月23日
    000
  • vs怎么运行html没有内容_解vs运html无内容问题【技巧】

    首先确认HTML文件是否设为启动页,右键选择“Set as Start Page”并重新运行;若仍空白,右键文件“View in Browser”检查内容;同时确保代码包含测试页面Hello World结构;可尝试通过IIS Express启动项目;推荐安装Web Essentials等扩展支持实时…

    2025年12月23日
    000
  • 深入理解JavaScript中let的作用域与变量声明

    本文深入探讨javascript中`let`关键字的作用域规则和变量声明机制。`let`引入了块级作用域,使得变量仅在其声明的代码块内有效。文章通过示例代码分析了在嵌套块中重复使用`let`声明同名变量时,会创建新的局部变量并覆盖外部变量的常见陷阱,并提供了正确的变量赋值实践,旨在帮助开发者避免因不…

    2025年12月23日
    000
  • 在 HTML Canvas 中正确应用自定义字体:常见陷阱与解决方案

    在 html canvas 上应用自定义字体时,开发者常遇到字体不生效的问题。主要原因在于多词字体名称需要使用引号包裹,并且外部字体必须在绘制前通过 `document.fonts.ready` 确保加载完成。本文将详细讲解这些关键点,并提供实用的代码示例,帮助您在 canvas 中准确渲染自定义文…

    2025年12月23日
    000
  • 解决PHP环境中HTML与CSS资源(图片、样式)加载异常的常见问题

    在将html/css项目集成到php环境时,开发者常遇到图片和部分css样式(如背景图)无法正常加载的问题。这通常源于css文件链接方式不当或资源路径(包括“标签和css背景图)解析上下文的变化。本文将详细阐述正确的css引入方法、资源路径管理策略,并提供调试技巧,帮助您有效解决此类加载异常,确保…

    好文分享 2025年12月23日
    000

发表回复

登录后才能评论
关注微信