实现动态搜索卡片并准确显示“无结果”提示的教程

实现动态搜索卡片并准确显示“无结果”提示的教程

本教程详细介绍了如何优化javascript卡片搜索功能,确保“无结果”提示仅在没有匹配项时显示,而非在搜索过程中误触。通过重构搜索逻辑,首先筛选出所有匹配项,然后根据匹配结果的数量来控制卡片的显示与“无结果”提示的切换,从而提供更准确、用户友好的交互体验。

在现代Web应用中,动态内容过滤和搜索是常见功能。当用户在搜索框中输入关键词时,页面上的卡片(或其他内容项)会根据关键词进行筛选,只显示匹配的结果。然而,一个常见的挑战是,如何在没有匹配结果时,优雅地显示一个“无结果”提示,而不是在每次隐藏一个不匹配的卡片时都错误地显示它。本文将深入探讨如何通过优化JavaScript逻辑来解决这一问题,确保“无结果”提示的准确显示。

问题分析:原始方法的不足

原始的搜索逻辑通常在一个循环中遍历所有卡片。在循环内部,如果一张卡片不匹配搜索条件,它会被隐藏,并且“无结果”提示可能会被设置为显示。这种逐个判断的方式会导致问题:即使还有其他卡片匹配,只要当前循环到的卡片不匹配,提示就可能被错误地显示出来。

例如,以下是原始代码片段中的关键逻辑:

for (i = 0; i  -1) {    cards[i].style.display = "block";  } else {    cards[i].style.display = "none";    // 这里的逻辑会导致问题:只要有一个卡片不匹配,就显示“无内容”    noContent.style.display = "flex";   }}

这段代码的问题在于,noContent.style.display = “flex”; 这行代码在每次遇到不匹配的卡片时都会执行。如果搜索结果只剩下一张卡片,而其他卡片都被隐藏,那么在隐藏那些不匹配的卡片时,“无内容”提示就会被错误地显示出来。我们期望的是,只有当 所有 卡片都不匹配时,才显示“无内容”提示。

优化解决方案:先过滤后显示

为了解决上述问题,我们需要改变处理逻辑:首先遍历所有卡片,找出所有匹配的卡片,然后根据匹配卡片的总数来决定是显示匹配卡片还是“无结果”提示。

以下是优化后的JavaScript代码:

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() 将 getElementsByClassName 返回的 HTMLCollection 转换为真正的数组。这使得我们可以方便地使用 forEach、filter 等现代JavaScript数组方法。统一隐藏: 在开始筛选之前,先将所有卡片隐藏。这样可以确保在每次搜索操作开始时,UI处于一个干净的状态。集中过滤: 使用 filter() 方法一次性找出所有符合搜索条件的卡片,并将它们存储在 matchingCards 数组中。集中显示: 遍历 matchingCards 数组,只显示这些匹配的卡片。条件判断显示“无结果”: 最后,根据 matchingCards 数组的长度来判断是否显示“无结果”提示。如果 matchingCards.length 为 0,则表示没有匹配的卡片,此时才显示 noContent 元素。

HTML结构

为了支持上述JavaScript逻辑,HTML结构需要包含搜索输入框、卡片容器和“无结果”提示元素。

@@##@@

Tips to keep your car running.

@@##@@

Auto Repair

...

there are no more blog post with this term

注意: 初始时,no-content 元素可以通过 style=”display: none;” 或者在CSS中设置 display: none; 来隐藏。JavaScript会根据搜索结果动态控制其显示。

CSS样式

CSS样式主要用于布局和美化卡片以及“无结果”提示。以下是与功能相关的关键样式:

.card-container {  display: flex;  flex-wrap: wrap;  justify-content: center;  /* ... 其他样式 ... */}.blog-card {  /* ... 卡片样式 ... */}.no-content {  width: 100vw;  height: 50vh;  display: flex; /* 默认设置为flex,方便JavaScript控制显示/隐藏 */  justify-content: center;  align-items: center;  /* ... 其他样式 ... */}.no-content h1 {  font-size: 20px;  padding: 0px 20px;  font-family: 'Montserrat', sans-serif;  color: #161663;}

这里 .no-content 的 display: flex; 是在它被显示时的默认状态。JavaScript会通过设置 noContent.style.display = “none”; 或 noContent.style.display = “flex”; 来覆盖这个状态。

总结与最佳实践

通过上述优化,我们实现了一个更加健壮和用户友好的卡片搜索功能。这种“先过滤,后根据结果统一更新UI”的模式是处理动态内容过滤的常见最佳实践。

核心要点:

分离关注点: 将数据过滤逻辑与UI更新逻辑分离。首先完成数据处理,然后根据处理结果统一更新视图。使用现代JavaScript: 充分利用 Array.from()、forEach()、filter() 等数组方法,使代码更简洁、可读性更强。初始化状态: 确保在每次搜索开始时,UI元素(如卡片和“无结果”提示)都重置到正确的初始状态,避免上次操作的残留影响。明确的条件判断: 只有当明确判断没有匹配结果时,才显示“无结果”提示,避免误报。

遵循这些原则,可以构建出响应迅速、逻辑清晰且易于维护的动态搜索界面。

实现动态搜索卡片并准确显示“无结果”提示的教程实现动态搜索卡片并准确显示“无结果”提示的教程实现动态搜索卡片并准确显示“无结果”提示的教程

以上就是实现动态搜索卡片并准确显示“无结果”提示的教程的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月23日 05:14:00
下一篇 2025年12月23日 05:14:18

相关推荐

  • css3的渐进增强和优雅降级

    这次给大家带来css3的渐进增强和优雅降级,css3渐进增强和优雅降级的注意事项有哪些,下面就是实战案例,一起来看一下。 渐进增强和优雅降级这两个概念是在 CSS3 出现之后火起来的。由于低级浏览器不支持 CSS3,但是 CSS3 特效太优秀不忍放弃,所以在高级浏览器中使用CSS3,而在低级浏览器只…

    好文分享 2025年12月24日
    000
  • css怎样做出六边形图片

    这次给大家带来css怎样做出六边形图片,css做出六边形图片的注意事项有哪些,下面就是实战案例,一起来看一下。 本文主要介绍了css实现六边形图片的示例代码,分享给大家,具体如下: 不说别的,先上效果:   用简单的p配合伪元素,即可‘画出’这幅六边形图片,原理是三个相同宽高的p,通过定位旋转拼合成…

    2025年12月24日 好文分享
    000
  • CSS做出图片背景填充的六边形

    这次给大家带来CSS做出图片背景填充的六边形,CSS做出图片背景填充的六边形的注意事项有哪些,下面就是实战案例,一起来看一下。 六边形的实现原理其实就是通过旋转三个重叠的矩形得到的,如下图所示: 这里为了得到一个正的六边形,两个矩形旋转的角度必须为-60deg和60deg,以及矩形高宽比必须是Mat…

    好文分享 2025年12月24日
    000
  • CSS3的calc() 方法怎么使用

    这次给大家带来CSS3的calc() 方法怎么使用,CSS3的calc()方法使用的注意事项有哪些,下面就是实战案例,一起来看一下。 下面一段代码给大家介绍css3中的calc()方法,具体内容如下所示: [Ctrl+A 全部选择 提示:您可先修改部分代码,再按运行] 如上代码,预览可以看出红色框超…

    好文分享 2025年12月24日
    000
  • 预处理器Sass如何使用

    这次给大家带来预处理器Sass如何使用,使用预处理器Sass的注意事项有哪些,下面就是实战案例,一起来看一下。 Sass 是一款强化 CSS 的辅助工具,它在 CSS 语法的基础上增加了变量 (variables)、嵌套 (nested rules)、混合 (mixins)、导入 (inline i…

    好文分享 2025年12月24日
    000
  • CSS 垂直水平居中有哪几种方法

    这次给大家带来CSS 垂直水平居中有哪几种方法,CSS 垂直水平居中的注意事项有哪些,下面就是实战案例,一起来看一下。 CSS 居中对齐 代码中均省略了浏览器前缀 以下例子以我的个人的标准排序 当然也有更多的居中处理方法 但我觉得只有这5种方法是最完善的解决方案 flex 居中 优点:可对未知高度进…

    好文分享 2025年12月24日
    000
  • 纯CSS如何实现下拉菜单

    这次给大家带来纯CSS如何实现下拉菜单,纯CSS实现下拉菜单的注意事项有哪些,下面就是实战案例,一起来看一下。 本篇文章主要介绍了纯CSS实现下拉菜单的示例代码,分享给大家,具体如下: 将下拉菜单的ul高度设置为0,并且超出部分隐藏掉。 设置下拉菜单的高度添加过渡效果,高度为auto时过渡效果失效。…

    2025年12月24日
    000
  • css的进度条文字根据进度渐变

    这次给大家带来css的进度条文字根据进度渐变,css进度条文字根据进度渐变的注意事项有哪些,下面就是实战案例,一起来看一下。 本文介绍了css 进度条的文字根据进度渐变的示例代码,分享给大家,具体如下: 需求 1.进度条里面的文字需要根据进度的长度而变化 原理 用两个一模一样的样式的 p 重叠起来 …

    2025年12月24日
    000
  • 浅谈css网页的布局问题

    这次给大家带来浅谈css网页的布局问题,css网页的布局问题的注意事项有哪些,下面就是实战案例,一起来看一下。 1、左边固定,右边自适应布局的两种实现方式 效果图如下: 大屏展示: 小屏展示:   第一种实现方式通过负边距与浮动 实现左边固定,右边自适应的布局。 主要代码如下: .left{floa…

    2025年12月24日 好文分享
    000
  • 谈谈CSS中的几种选择器

    今天本文主要和大家谈谈CSS中的几种选择器 ,需要的朋友可以参考下,希望能帮助到大家。 1、通配符选择器 通配符选择器用“*”号表示,是所有选择器中作用范围最广的,能匹配页面中所有的元素 /*设置当前页面中所有标签的颜色为红色*/* {color: red;}  2、标签选择器 标签选择…

    好文分享 2025年12月24日
    000
  • 使用html和css实现康奈尔笔记

    这次给大家带来使用html和css实现康奈尔笔记,使用html和css实现康奈尔笔记的注意事项有哪些,下面就是实战案例,一起来看一下。 缘起 人家都说 康奈尔笔记 法,很好用呢,能抵抗遗忘曲线,让你的笔记事半功倍,有兴趣的同学自行百度哈。 网上有很多现成的模板,下载下来之后吧,看着好像在上面写英文可…

    好文分享 2025年12月24日
    000
  • CSS的子代选择符

    这次给大家带来CSS的子代选择符,使用CSS的子代选择符的注意事项有哪些,下面就是实战案例,一起来看一下。 后代选择符用于选取一个标签的所有后代,包括子代和孙辈等;而子代选择符只选取指定父辈的子代标签(指定标签元素的第一代子元素)。 子代选择符使用一个额外的符号(尖括号> )表明两个元素之间的…

    2025年12月24日 好文分享
    000
  • 纯css实现树形结构

    这次给大家带来纯css实现树形结构,纯css实现树形结构的注意事项有哪些,下面就是实战案例,一起来看一下。 本文我给大家介绍如何使用CSS和HTML就可以将一个多级无序列表的节点展现成树状结构。树状结构我们在很多项目中要应用,如公司组织架构图、无限级分类等等。 纯css实现属性结构 css实现属性结…

    2025年12月24日
    000
  • CSS实现手风琴布局

    这次给大家带来CSS实现手风琴布局,CSS实现手风琴布局的注意事项有哪些,下面就是实战案例,一起来看一下。 昨天在做一个旅游页面的项目,前端页面实现的过程中遇到这样一个需求。需要把一组图片形成手风琴的展示效果。认真的思考一遍后,决定就用普通的HTML+CSS就可以实现这个需求。今天趁着空闲时间稍微梳…

    2025年12月24日
    000
  • CSS怪异盒模型和标准盒模型如何使用

    这次给大家带来CSS怪异盒模型和标准盒模型如何使用,使用CSS怪异盒模型和标准盒模型的注意事项有哪些,下面就是实战案例,一起来看一下。 在html文档中,每个渲染在页面中的标签都是一个个盒子模型。 盒子模型又分为 : W3C标准的盒子模型 和 IE标准的盒子模型。 由于目前大部分主流的浏览器支持的是…

    2025年12月24日 好文分享
    000
  • 三种CSS截图的方法

    本文主要为大家分享三种CSS截图的方法 ,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能帮助到大家。 CSS截图图片的几种方式 原图: DIV   使用background-position:Xpx Ypx (图片左上角坐标) 配合width和height .p_bg { w…

    2025年12月24日 好文分享
    000
  • css实现图片未加载完成时占位显示实例分享

    通过css控制,可以实现加载网络图片时,未加载完成的时候显示本地一张占位图,加载完成后显示网络图片; 原理:通过在img标签的after伪元素上添加一张占位图,并且img都设置为position:relative;after设置position:absolute;img标签的src为网络图片,这样加…

    2025年12月24日
    000
  • 用CSS实现Tab页切换效果的示例代码_CSS教程_CSS_网页制作

    最近切一个页面的时候涉及到了一个tab切换的部分,因为不想用js想着能不能用纯css的选择器来实现切换效果。搜了一下大致有下面三种写法。 1、利用 :hover 选择器 缺点:只有鼠标在元素上面的时候才有效果,无法实现选中和默认显示某一个的效果 2、利用 a标签的锚点 + :target选择器 缺点…

    2025年12月24日
    000
  • css之分页打印

    这次给大家带来css之分页打印,css之分页打印的注意事项有哪些,下面就是实战案例,一起来看一下。 很久没写文章了,最近做了一个员工入职的项目,该系统有一个批量打印个人信息的功能需求。因为之前也没接触过打印这方面的功能,就上网查了下,发现jquery有个打印功能的 API(PrintArea) ,关…

    2025年12月24日
    000
  • 清除css浮动的方法

    这次给大家带来清除css浮动的方法,清除css浮动的注意事项有哪些,下面就是实战案例,一起来看一下。 一,我们为什么要浮动 为什么浮动,为什么要清除浮动,以及清除浮动的方法。在网页布局的时候有时需要元素并排显示,如果不选择浮动,那么那些块状元素就会一行一行显示,占用空间不说,用户体验也是极为不好的。…

    2025年12月24日 好文分享
    000

发表回复

登录后才能评论
关注微信