Vue中实现自动匹配搜索框内容 关键字高亮文字显示

news2024/11/24 9:06:40

实现效果如下:

 1.首先需要给输入框进行双向绑定

 2.拿到搜索的结果去渲染页面  将返回的结果和搜索的关键字进行比对 如果相同的 就变红

上代码

html部分

//输入框
 <div class="search">
          <div class="shuru">
            <input type="请输入要查询的内容" v-model="searchText" 
        @keydown.enter="getSearch('btn')">
          </div>
          <div class="btn" @click="getSearch('btn')">
            <img src="../assets/wyc/search.png" alt="">
          </div>
       </div>


//要展示的内容
 <div class="bottom">
        <div class="contentlist" v-for="(item,index) in contentData.searchData" :key="index" @click="linkToPage(item.URL)">
            <div class="fileTile" v-html="brightenKeyword(item.BT,searchText)"></div>  
            <!-- <div class="fileTile" >{{ brightenKeyword(item.BT,searchText) }}</div>   -->
            <div class="info">
                 <div class="type">
                     <span>文件类型:</span>
                     <div>{{ item.MODULE_NAME}}</div>
                 </div>
                 <div class="time">
                     <span>创建时间:</span>
                     <div>{{ item.TIME }}</div>
                 </div>
            </div>      

        </div>
      </div>

js部分

//搜索方法
getSearch(val){
                console.log(val);
                if(val!='' && val=='btn'){
                    this.PageInfo.pagenum=1
                }
                  let str
                if(this.searchText!="" && this.searchText.indexOf("+")>-1){
                    str = this.searchText.replace('+','%2B')
                    console.log(str,'this.searchText');
                }else{
                    str = this.searchText
                }
                let {data}=await this.$http.post(`/ctrl/query/oa`,{
                    query_date:this.chooseY,
                    query_content:str,
                    limit:this.PageInfo.pagesize,
                    page:this.PageInfo.pagenum
                })
                console.log(data.data,'搜索内容的数据');
                if(data && data.data){
                    this.contentData.searchData=data.data.data.data
                    this.PageInfo.total=data.data.count
                }
                console.log(this.PageInfo);
            },

 //将文字标红
 brightenKeyword(contentText, keyword) {
                // debugger
                var res=contentText
                // keyword = keyword.replace("+",'')
                var judgeFn = new RegExp(/\s+/g);//空格的正则
                if(keyword.includes('+')){
                    //    const Reg = new RegExp("+", 'g');
                        keyword = keyword.replace("+",'')
                }
                else if (judgeFn.test(keyword)) {
                    console.log(keyword,"【结果】:内容包含有空格!");
                    let wordsArray =this.getRedWords(contentText, keyword);
                    for(let word of wordsArray){
                    if(word!=""){
                        // 设定需要检索的模式
                        const Reg = new RegExp(word, 'g');
                        //替换每一个相同字
                        res = res.replace(Reg, `<span style="color: red; font-family: 'pfm';">${word}</span>`);
                        }
                    }
                    return  res
                }
                // 判断标题中是否包含关键字
                if(contentText.includes(keyword)){
                    const Reg = new RegExp(keyword, 'g');
                    res = res.replace(Reg, `<span style="color: red; font-family: 'pfm';">${keyword}</span>`);
                    }
                return res;//此时的res里已经将需要标红的字体带上了格式(<span style="color:red"></span>)
            },

 //获取需要标红的文字
  getRedWords(contentText, keyword) {
                let keywordArray = keyword.split(" ");
                console.log(keywordArray,'有空格的字...');
                let wordsArray = [];
                for(let key of keywordArray){
                    if(contentText.includes(key)){
                     wordsArray.push(key)
                    }
                }
                // this.changeRedText(contentText,wordsArray)
                return wordsArray;
            },

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/893552.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试报告有哪些测试内容?

软件测试报告可以包含以下测试内容&#xff1a; 1、功能测试&#xff1a;测试软件的基本功能是否实现&#xff0c;是否符合要求。 2、性能测试&#xff1a;测试软件的响应速度、并发能力、稳定性等性能指标。 3、界面测试&#xff1a;测试软件的用户界面是否友好、易于使用。 …

开车打电话买什么样的蓝牙好,分享几款通话性能最好的蓝牙耳机

随着时间的推移&#xff0c;如今的年轻人越来越倾向于使用骨传导耳机&#xff0c;因为他们都知道&#xff0c;骨传导耳机最大的优点就是带着很舒服的感觉&#xff0c;它不仅比普通的入耳式耳机更容易戴上&#xff0c;而且还比普通的入耳式耳机更安全&#xff0c;能有效地减少中…

try-with-resource语法使用

try-with-resources 是 Java 7 引入的一种语法结构&#xff0c;用于更方便地管理需要关闭的资源&#xff08;如 I/O 流、数据库连接等&#xff09;。它可以在代码块结束后自动关闭资源&#xff0c;无需显式调用 close() 方法&#xff0c;从而避免资源泄漏。 基本结构 try (Res…

opencv-python使用鼠标点击图片显示该点坐标和像素值IPM逆透视变换车道线

OpenCV的鼠标操作 实现获取像素点的功能主要基于OpenCV的内置函数cv2.setMouseCallback()&#xff0c;即鼠标事件回调 setMouseCallback(winname, onMouse,userdata0) winname: 接收鼠标事件的窗口名称 onMouse: 处理鼠标事件的回调函数指针 userdata: 传给回调函数的用户数据…

交流充电桩控制主板的优点

你是否曾经担心过充电桩可能会对你的电动车电池造成危害?让我们来探讨一下交流充电桩主板的优点&#xff0c;让你安心充电。 首先&#xff0c;交流充电桩主板采用了高安全性的电源设计&#xff0c;能够有效地保护电池免受电流、电压过高的危害&#xff0c;确保电池的安全使用。…

解决执行 spark.sql 时版本不兼容的一种方式

场景描述 hive 数据表的导入导出功能部分代码如下所示&#xff0c;使用 assemble 将 Java 程序和 spark 相关依赖一起打成 jar 包&#xff0c;最后 spark-submit 提交 jar 到集群执行。 public class SparkHiveApplication {public static void main(String[] args){long sta…

Dubbo—核心优势

一、快速易用 无论你是计划采用微服务架构开发一套全新的业务系统&#xff0c;还是准备将已有业务从单体架构迁移到微服务架构&#xff0c;Dubbo 框架都可以帮助到你。Dubbo 让微服务开发变得非常容易&#xff0c;它允许你选择多种编程语言、使用任意通信协议&#xff0c;并且…

什么是低价治理服务

当商品的销售价低于品牌要求的建议价时&#xff0c;就会被认为是低价销售&#xff0c;销售的主体是店铺&#xff0c;那店铺的运营方就成了低价的主导者&#xff0c;低价行为大部分品牌都会跟进&#xff0c;低价店铺的信息品牌也会去收集&#xff0c;因为只有掌握了低价链接、低…

什么是 脏写,脏读,幻读,不可重复读?怎样能解决这四种问题?

我们通过如下语句先创建一个 student 学生表。我就以对学生表的操作来解释什么是脏写&#xff0c;脏读&#xff0c;幻读&#xff0c;不可重复读 创建完成之后随便插入一条数据 1. 脏写&#xff1f; 对于两个事务 SessionA&#xff0c;SessionB&#xff0c;如果SessionA修改了另…

无公网IP,公网SSH远程访问家中的树莓派教程

文章目录 前言 如何通过 SSH 连接到树莓派步骤1. 在 Raspberry Pi 上启用 SSH步骤2. 查找树莓派的 IP 地址步骤3. SSH 到你的树莓派步骤 4. 在任何地点访问家中的树莓派4.1 安装 Cpolar内网穿透4.2 cpolar进行token认证4.3 配置cpolar服务开机自启动4.4 查看映射到公网的隧道地…

Timeplate Definition

timeplate定义描述单个tester cycle&#xff0c;并指定所有event edges被放置在cycle的位置。 必须在引用之前定义所有的timeplates。一个procedure必须有至少一个timeplate定义&#xff0c;所有的时钟必须在timeplate定义中进行定义&#xff0c;timeplate的定义有以下格式&am…

C++ STL关联式容器(详解)

STL关联式容器 C STL关联式容器是什么&#xff1f; 在《C STL容器》一节中讲到&#xff0c;C 容器大致分为 2 类&#xff0c;即序列式容器和关联式容器。其中&#xff0c;序列式容器&#xff08;包括 array、vector、list、deque 和 forward_list&#xff09;已经在前面章节中…

【校招VIP】前端JS语言考点之Vue考察

考点介绍&#xff1a; Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化的工具…

我的编程语言学习笔记

前言 作为一名编程初学者&#xff0c;我深知学习编程需要不断积累和记录。在这篇博客文章中&#xff0c;我将分享一些我在学习C/C编程语言过程中记录的常用代码、特定函数、复杂概念以及特定功能。希望能与大家一起切磋进步&#xff01; 常用代码&#xff1a; 1. 输入输出操作…

19----C/C++之加密解密带空格字符串的读入

本文主要通过一道题目来讲解C语言相关的简单加密和解密&#xff0c;以及如何读入带有空格的字符串 小试牛刀 题目描述 在情报传递过程中&#xff0c;为了防止情报被截获&#xff0c;往往需要对情报用一定的方式加密。我们给出一种最简单的加密方法&#xff0c;对给定的一个字…

【爬虫练习之glidedsky】爬虫-基础1

题目 链接 爬虫的目标很简单&#xff0c;就是拿到想要的数据。 这里有一个网站&#xff0c;里面有一些数字。把这些数字的总和&#xff0c;输入到答案框里面&#xff0c;即可通过本关。 思路 找到调用接口 分析response 代码实现 import re import requestsurl http://www.…

冠达管理:印花税是什么意思?港股取消印花税是利好还是利空?

在股票市场上&#xff0c;投资者买卖股票需求交纳必定的手续费用&#xff0c;比如&#xff0c;佣钱费用、过户费用、印花税等等&#xff0c;那么&#xff0c;印花税是什么意思&#xff1f;港股撤销印花税是利好仍是利空&#xff1f;下面冠达管理为大家准备了相关内容&#xff0…

QT处理日志文件

由于实际生产需要&#xff0c;软件系统的运行&#xff0c;会产生大量的日志文件&#xff0c;有时候一天就能产生超过百万条log记录&#xff0c;那么为了能够处理日志文件&#xff0c;查询并且找到我们想要的报错信息&#xff0c;因此不得不考虑怎么实现&#xff0c;打开大日志文…

excel日期函数篇2

1、DATE(year,month,day)&#xff1a;根据年、月、日三个数值返回其表示的日期 2、DATEVALUE(date_text)&#xff1a;返回由文本字符串表示的日期的十进制数字 处理时间的时候&#xff0c;如果得到的是字符串格式&#xff0c;要将其转换为日期进行相关操作。excel函数里是使用文…

MinGW编译运行报错RTTI symbol not found for class ‘XXX‘

最近在调试程序时莫名的出现图中报错&#xff1a; 还遇到过for class QObject&#xff0c;在此记录一下&#xff0c;排查后发现&#xff0c;原因都是有资源被重复释放导致的。