JavaScript卡片搜索:优化无结果提示显示逻辑

JavaScript卡片搜索:优化无结果提示显示逻辑

本教程旨在解决动态卡片搜索中“无结果”提示显示不准确的问题。通过重构javascript搜索逻辑,我们首先隐藏所有卡片,接着根据搜索词筛选出匹配的卡片并显示它们,最后根据匹配卡片的数量精确控制“无内容”提示的可见性,确保该提示仅在没有搜索结果时才出现,从而提升用户体验。

在Web开发中,实现带有搜索功能的动态卡片展示是常见的需求。然而,一个常见的挑战是如何在没有搜索结果时,准确地显示“无内容”或“卡片未找到”的提示信息。如果处理不当,可能会导致提示信息过早或错误地显示,影响用户体验。本文将详细介绍如何通过优化JavaScript逻辑,实现一个健壮且用户友好的卡片搜索功能。

初始问题分析

在传统的循环遍历卡片并逐个判断显示状态的搜索逻辑中,很容易出现一个问题:当某个卡片不匹配时,立即将“无内容”提示设置为可见。这种做法的缺陷在于,即使后续还有其他卡片能够匹配搜索条件,或者搜索结果只剩一个,该提示也可能被错误地显示出来。正确的逻辑应该是:在所有卡片都被判断完毕后,根据最终匹配到的卡片数量来决定是否显示“无内容”提示。

核心优化思路

为了解决上述问题,我们需要改变处理搜索结果的策略。核心思路可以概括为以下三步:

预处理: 在开始搜索前,将所有卡片默认设置为隐藏状态。筛选: 遍历所有卡片,根据搜索词筛选出所有匹配的卡片。后处理: 根据筛选结果,显示所有匹配的卡片。如果匹配卡片数量为零,则显示“无内容”提示;否则,隐藏该提示。

这种“先全部隐藏,再选择性显示”的策略,确保了“无内容”提示的显示决策是在整个搜索过程完成后,基于最终结果做出的。

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

实现步骤与代码示例

我们将通过JavaScript、HTML和CSS的配合来完成这个功能。

1. HTML 结构

首先,确保你的HTML结构包含一个搜索输入框、一个卡片容器以及一个用于显示“无内容”提示的元素。

AI图像编辑器 AI图像编辑器

使用文本提示编辑、变换和增强照片

AI图像编辑器 46 查看详情 AI图像编辑器

JavaScript卡片搜索:优化无结果提示显示逻辑

Tips to keep your car running.

JavaScript卡片搜索:优化无结果提示显示逻辑

Auto Repair

Did you know that in 2021 there were 201,927 active dentists in the United States? That means there is a ratio of approximately 61 dentists per 100,000 people in the country…

there are no more blog post with this term

请注意,no-content 元素默认通过 style=”display: none;” 或 CSS 规则隐藏。

2. 优化的 JavaScript 逻辑

以下是经过优化的 myFunction 函数,它实现了上述的核心优化思路:

function myFunction() {  const input = document.getElementById("myFilter");  const noContent = document.getElementById("no-content");  const filter = input.value.toUpperCase(); // 获取搜索词并转为大写  const cardContainer = document.getElementById("myItems");  // 将HTMLCollection转换为数组,以便使用forEach和filter等数组方法  const cards = Array.from(cardContainer.getElementsByClassName("blog-card"));  // 步骤1: 首先,隐藏所有卡片  cards.forEach(card => card.style.display = "none");  // 步骤2: 筛选出匹配搜索词的卡片  const matchingCards = cards.filter(    card => card.querySelector(".card-title").innerText.toUpperCase().includes(filter)  );  // 步骤3: 显示所有匹配的卡片  matchingCards.forEach(card => card.style.display = "block");  // 步骤4: 根据匹配卡片的数量决定是否显示“无内容”提示  noContent.style.display = (matchingCards.length === 0 ? "flex" : "none"); }

代码解析:

Array.from(cardContainer.getElementsByClassName(“blog-card”)): getElementsByClassName 返回的是一个 HTMLCollection,它不是真正的数组,不具备 forEach 或 filter 等方法。通过 Array.from() 可以将其转换为一个可操作的数组。cards.forEach(card => card.style.display = “none”): 这一行在每次搜索开始时,确保所有卡片都被隐藏。这是一个关键的预处理步骤。cards.filter(…): 使用 filter 方法创建一个新数组 matchingCards,其中只包含标题与搜索词匹配的卡片。includes() 方法用于判断字符串是否包含另一个字符串。matchingCards.forEach(card => card.style.display = “block”): 遍历 matchingCards 数组,将所有匹配的卡片设置为可见。noContent.style.display = (matchingCards.length === 0 ? “flex” : “none”): 这是决定“无内容”提示显示与否的最终逻辑。如果 matchingCards 数组为空(即 length 为0),则显示 noContent 元素(设置为 flex 以利用其CSS样式);否则,将其隐藏。

3. CSS 样式

确保 no-content 元素有适当的样式,以便在显示时能够居中且美观。

@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@500&family=Open+Sans:wght@700&display=swap');/* 其他样式... */.no-content {  width: 100vw;  height: 50vh;  display: flex; /* 默认隐藏,通过JS控制显示时设置为flex */  justify-content: center;  align-items: center;}.no-content h1 {  font-size: 20px;  padding: 0px 20px;  font-family: 'Montserrat', sans-serif;  color: #161663;}

注意:在HTML中,no-content 元素默认添加了 style=”display: none;”,这样可以确保页面加载时它是隐藏的。JavaScript会根据搜索结果动态地将其设置为 flex 或 none。

注意事项与最佳实践

大小写不敏感搜索: 在示例代码中,我们通过 toUpperCase() 将搜索词和卡片标题都转换为大写进行比较,实现了大小写不敏感的搜索。性能优化: 对于非常大量的卡片(数千个以上),每次键盘输入都遍历和操作DOM可能会有性能问题。可以考虑引入去抖(debounce)技术,减少 myFunction 的调用频率,或使用虚拟滚动等高级优化手段。用户体验: 可以在搜索时添加加载指示器,或者在搜索结果为空时提供建议,例如“请尝试其他关键词”。可访问性: 考虑为搜索输入框添加 aria-label 或 label,并确保“无内容”提示在屏幕阅读器中可被正确识别。

总结

通过上述优化后的JavaScript逻辑,我们成功地解决了卡片搜索中“无内容”提示显示不准确的问题。核心在于将卡片显示和“无内容”提示的决策逻辑分离,先统一处理所有卡片的显示状态,再根据最终匹配结果进行判断。这种方法不仅提高了代码的健壮性,也极大地提升了用户在使用搜索功能时的体验。

以上就是JavaScript卡片搜索:优化无结果提示显示逻辑的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月10日 13:21:09
下一篇 2025年11月10日 13:25:13

相关推荐

  • IndexedDB模式设计:动态对象存储区的挑战与替代方案

    本文探讨了在IndexedDB中动态添加对象存储区(Object Store)的挑战,特别是createObjectStore方法只能在onupgradeneeded回调中调用的限制。针对希望实现类似localStorage分区功能的需求,文章深入分析了直接在运行时更改数据库模式的局限性,并提出了两…

    2025年12月20日
    000
  • JavaScript数值计算:警惕预期与实际的偏差

    本文探讨JavaScript数值计算中一个常见的“错误”现象:当代码逻辑无误但结果不符合预期时,问题往往出在对数学运算的误解而非程序本身。通过一个具体的除法案例,文章强调了在编程中验证数学期望的重要性,并提供了调试和避免此类误区的实用建议。 在javascript编程中,尤其当涉及到从用户输入字段获…

    2025年12月20日
    000
  • Next.js 13 Loading 组件无法显示问题排查与解决方案

    本文旨在解决 Next.js 13 中 loading.tsx 组件无法在页面刷新时显示的问题。通过分析 Next.js 的路由机制和 Loading UI 的工作原理,阐述了 Loading 组件的正确使用场景,并提供了一种在页面初次加载时模拟 Loading 效果的方案,帮助开发者提升用户体验。…

    2025年12月20日
    000
  • React中动态切换CSS类:构建响应式汉堡菜单的实践指南

    本教程详细讲解如何在React组件中高效地动态切换CSS类,以实现响应式汉堡菜单的开合效果。文章强调使用React状态管理UI的正确方法,避免直接DOM操作,并通过实际案例分析了传统CSS选择器与React状态驱动类名应用的结合点,最终提供了一种更简洁、React友好的汉堡菜单实现方案,确保UI行为…

    2025年12月20日
    000
  • React组件中动态CSS类切换与性能优化实践

    本文详细阐述了在React应用中如何通过状态管理实现CSS类的动态切换,以实现诸如汉堡菜单的开合动画效果。我们将探讨基于useState的基础实现,并引入useMemo钩子进行性能优化,确保组件在状态更新时高效地应用或移除CSS类,同时结合CSS过渡效果,提供流畅的用户体验。 1. 理解React中…

    2025年12月20日
    000
  • React中动态CSS类切换与响应式菜单实现教程

    本教程详细讲解如何在React应用中正确实现动态CSS类切换,以构建响应式导航菜单。文章分析了常见的CSS选择器与JSX结构不匹配问题,提供了基于CSS选择器优化的解决方案,并强调了React状态管理与CSS特异性在构建动态UI时的关键作用,旨在帮助开发者避免在React中处理动态样式时的常见陷阱。…

    2025年12月20日
    000
  • React应用中CSS类动态切换与响应式菜单实现指南

    本文详细介绍了在React应用中如何高效且正确地动态切换CSS类,以实现响应式导航菜单的展开与收起功能。通过分析常见问题,特别是React状态管理与纯CSS交互的混合模式,提供了基于React状态的统一解决方案,并强调了组件化开发中避免混用不同状态管理机制的最佳实践,确保UI行为的一致性和可维护性。…

    2025年12月20日
    000
  • DataTables中基于列值条件渲染UI元素的实践指南

    本文详细介绍了如何在DataTables中,利用其强大的render函数,根据特定列(如notadp)的数据是否为空,动态地显示或隐藏UI元素(例如按钮)。文章将纠正常见的JavaScript语法错误和逻辑判断陷阱,提供经过优化的代码示例,确保开发者能够准确地实现基于数据条件的精细化UI控制,提升表…

    2025年12月20日
    000
  • DataTables条件渲染指南:基于列内容动态显示元素

    本文详细介绍了如何在DataTables中使用render函数实现基于特定列内容的条件渲染。通过分析常见的语法错误和空值判断误区,提供了正确的JavaScript代码示例,演示了如何根据列数据(如字符串是否为空)动态显示或隐藏HTML元素(如按钮),确保输出内容符合预期,提升数据表格的交互性和可用性…

    2025年12月20日
    000
  • DataTables条件渲染:根据列值动态控制UI元素显示

    本文详细阐述了如何在DataTables中使用render函数根据特定列(如空值)动态控制UI元素的显示。通过分析常见错误并提供修正后的代码示例,文章重点介绍了如何正确地判断列值是否为空,以及如何规范地返回HTML内容,确保只有符合条件的行才渲染指定按钮或其他元素,从而提升表格的交互性和数据展示的精…

    2025年12月20日
    000
  • Discord.js 机器人命令调试与事件监听最佳实践

    本文深入探讨了Discord.js机器人开发中常见的命令响应问题。针对旧版message事件不再生效的问题,我们详细介绍了如何正确使用messageCreate事件监听用户消息,并强调了Discord官方推荐的斜杠命令(Slash Commands)作为现代、高效且安全的交互方式。通过本文,开发者将…

    2025年12月20日
    000
  • 优化React列表渲染:使用React.memo避免不必要的组件重绘

    在React应用中,当数组状态更新(如添加或移除元素)时,列表中的所有组件可能都会不必要地重绘。本文将深入探讨如何利用React.memo优化组件性能,结合正确的key属性管理,有效阻止未改变的列表元素进行重绘,从而提升应用响应速度和用户体验,实现更高效的列表渲染策略。 理解列表组件的重绘问题 在r…

    2025年12月20日
    000
  • Prisma 查询未返回 Schema 中指定的数组:解决方案与最佳实践

    在使用 Prisma 进行数据库查询时,有时会遇到 Schema 中定义的关联数组未被返回的问题。本文将深入探讨此问题的原因,并提供详细的解决方案和最佳实践,帮助开发者避免类似错误,确保数据查询的完整性和准确性。核心在于理解 Prisma 的 include 选项,以及如何在查询中正确使用它来获取关…

    2025年12月20日
    000
  • Prisma 查询未返回 Schema 中指定的数组:解决方案

    本文旨在解决 Prisma 在查询时未返回 Schema 中定义的关联数组的问题。通过分析问题原因和提供示例代码,帮助开发者正确配置 Prisma 查询,确保关联数据能够被正确检索。本文将重点介绍如何在 findUnique 查询中包含关联的 items 数组,并提供相应的代码示例。 在使用 Pri…

    2025年12月20日
    000
  • 解决Prisma查询不返回Schema中指定的数组问题

    在使用Prisma进行数据库查询时,有时会遇到模型中定义的关联数组(例如,ShoppingList中的items数组)未被返回的问题。本文将深入探讨该问题的原因,并提供明确的解决方案,确保关联数据能够正确地包含在查询结果中,从而避免数据缺失和潜在的应用程序错误。 Prisma关联数据查询:理解inc…

    2025年12月20日
    000
  • Prisma 查询未返回 Schema 中指定的数组?原因及解决方案

    在使用 Prisma 进行数据库查询时,有时会遇到 Schema 中定义的关联数组未被返回的问题。这通常是因为在查询时没有显式地指定要包含这些关联数据。本文将深入探讨这一问题的原因,并提供详细的解决方案,确保您能正确获取关联数据,构建健壮的应用。 在使用 Prisma 时,即使数据库中存在关联数据,…

    2025年12月20日
    000
  • Prisma:查询未返回 Schema 中指定的数组的解决方案

    在使用 Prisma 进行数据库查询时,如果遇到 Schema 中定义的关联数组未返回的问题,通常是因为在查询中没有明确指定需要包含该关联数组。 在使用 prisma 进行数据库查询时,可能会遇到一个常见的问题:尽管在 prisma schema 中定义了关联关系,但查询结果中并未包含关联的数组数据…

    2025年12月20日
    000
  • Prisma关系查询:如何使用include获取关联数据

    Prisma ORM在执行查询时,默认情况下不会自动返回关联模型的数据,即使这些关系在Schema中已明确定义。要获取这些关联数据,开发者需要显式地在查询中利用include选项。本文将详细阐述Prisma这一默认行为的原因,并提供include选项的多种用法,包括基本使用、嵌套关联以及与selec…

    好文分享 2025年12月20日
    000
  • Vue 应用中高效共享数据的模块化策略

    本文探讨了在Vue应用中如何高效管理和共享数据,以避免重复的API请求。通过利用JavaScript模块的单例特性和Vue的响应式系统,我们能够构建一个轻量级的数据管理方案。该方案允许数据仅被加载一次,并在多个组件间实现响应式共享,从而优化性能并简化数据流,特别适用于不需要复杂状态管理库的场景。 在…

    2025年12月20日 好文分享
    000
  • Vue应用中高效共享数据:模块化响应式数据管理实践

    本教程探讨Vue应用中组件间数据共享的最佳实践,特别针对多个组件需展示相同数据时避免重复API请求的问题。文章提出一种轻量级、模块化的响应式数据管理方案,通过一个独立的JavaScript模块集中管理数据加载与状态,确保数据仅被请求一次,并能实时响应更新,从而优化应用性能并简化数据流。 在vue应用…

    2025年12月20日
    000

发表回复

登录后才能评论
关注微信