vue实现搜索高亮关键字

这篇具有很好参考价值的文章主要介绍了vue实现搜索高亮关键字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

模仿浏览器中ctrl+f实现搜索关键字 高亮显示
思路:

  1. 通过ref获取dom元素
  2. 删除当前关键词高亮色;
  3. 设置本次搜索的关键词高亮;
  4. 进行内容替换;
  5. 为首个关键词进行高亮,设置为当前关键词;

关键代码:

  1. 定义一个正则 key就代表要高亮的字符串,i 代表匹配大小写 g代表全局匹配
  2. 利用 字符串的replace方法进行替换,把匹配的关键字进行替换 进行包裹
  3. 正则语法: str.replace(正则,( 匹配到内容 )=>{ return 要替换的内容 })
 // 获取对应的dom元素
    const main = this.$refs[`checkboxOpposite${key}`][0].$el as any;

    let innerHTML = main.innerHTML;
    //删除当前关键词的背景色
    const emReg1 = new RegExp('<em style="background-color: yellow">', 'g');
    innerHTML = innerHTML.replace(emReg1, '');
    const emReg2 = new RegExp('</em>', 'g');
    innerHTML = innerHTML.replace(emReg2, '');
    const emReg3 = new RegExp('<strong style="background-color: #ff9632">', 'g');
   	innerHTML = innerHTML.replace(emReg3, '');
    const emReg4 = new RegExp('</strong>', 'g');
    innerHTML = innerHTML.replace(emReg4, '');
    // ------
    main.innerHTML = innerHTML;
    // 设置本次搜索背景色
    if (value !== '' && value !== ' ') {
      设置本次搜索背景色;
      const reg = new RegExp(value, 'g');
      const mainInnerHTML = innerHTML.replace(new RegExp('(?=\>).+?(?=\<)', 'g'), function (str) {
        const reg1 = new RegExp('(?=>).+', 'g');
        return str.replace(new RegExp('(>).+', 'g'), function (str2) {
          return str2.replace(reg1, function (str1) {
            return str1.replace(reg, '<em style="background-color: yellow">' + value + '</em>');
          });
        });
      });
      main.innerHTML = mainInnerHTML;
    }
    // em标签都是被替换的 所以em标签的数量就是搜索到关键字的数量 为首个关键词进行高亮,设置为当前关键词;
    // const num = document.getElementsByTagName('em').length;
    // if (num !== 0) {
    //   document.getElementsByTagName('em')[0].innerHTML =
    //     '<strong style="background-color: #ff9632">' + value + '</strong>';
    //   // 滚动到第一个关键字位置
    //   document.getElementsByTagName('em')[0].scrollIntoView({
    //     block: 'start',
    //     behavior: 'smooth',
    //   });
    // }

参考链接

但是上方适用于段落这种操作,如果是和饿了么的下拉框等组件配合使用的话,就有些不行, 不能点击checkbox【起码我没想到方法,有大佬想到方法,可以一起交流】

所以基于饿了么的我又想了一个办法,配合使用v-html
我这里是checkbox的例子,我们获取到options,对options的每一个进行操作,如果匹配符合的话给他设置背景

formOptions是很多多选框组成的数组,我需要替换到搜索的那一组多选框的options即可

 private threeFormChange(value: string, searchItem: any) {
    if (searchItem.options && searchItem.options.length > 0) {
      searchItem.options.filter(item => {
        const reg = new RegExp(value, 'g');
        const replaceString = `<span style="background-color: yellow">${value.trim()}</span>`;
        item.htmlLabel = null;
        if (item.label.match(reg) && value) {
          item.htmlLabel = item.label.replace(reg, replaceString);
          return item;
        }
      });
      this.formOptions.splice(
        this.formOptions.findIndex(item => item.prop === searchItem.prop),
        1,
        {
          ...searchItem,
          options: searchItem.options
        }
      );
    }
  }

html代码文章来源地址https://www.toymoban.com/news/detail-497865.html

 <el-checkbox-group v-model="bindValue" v-on="$listeners">
    <el-checkbox-button
      v-for="(item, index) in options"
      :key="index"
      :label="item.value"
      :disabled="item.disabled ? item.disabled : false"
      :checked="item.checked ? item.checked : false"
      :class="item.class ? item.class : ''"
    >
      <span v-show="!item.htmlLabel">{{ item.label }}</span>
      <div v-show="item.htmlLabel" v-html="item.htmlLabel"></div>
    </el-checkbox-button>
  </el-checkbox-group>

到了这里,关于vue实现搜索高亮关键字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用ES搜索关键字并且返回模糊字段高亮

       一般来说,各个网站,首页的搜索,都会有进行全文搜索的示例,并且把模糊匹配的多个数据进行标记(高亮),这样便于全局检索关键的数据,便于客户进行浏览。基于此,本文简单介绍这种功能基本java 的 实现    由于公司页面此功能隐藏了,本文就以接口调用返回看具

    2024年02月14日
    浏览(56)
  • React实现关键字高亮

    先看效果: 实现很简单通过以下这个函数: 展示某段文本时调用该函数处理后,在展示就能实现高亮效果 原理是: 这个函数的作用是在给定的文本中,将指定的进行高亮标记。它接受两个参数:text(要处理的文本)和 keyword(要高亮标记的)。 函数首先使用

    2024年02月13日
    浏览(43)
  • JavaFx 关键字高亮文本实现

    原文地址:JavaFx 高亮文本实现 - Stars-One的杂货小窝 整蓝奏云批量下载器里的搜索功能想到的一个高亮功能,借助textflow组件来实现,记录一下 本文基于TornadoFx框架进行编写,封装工具代码是kotlin版本 然后也是顺便把这个封装成了stars-one/common-controls 里的 xHighLightText

    2024年02月04日
    浏览(74)
  • Vue关键字搜索功能(小案例)

    这里介绍两种方法:1、使用watch侦听方法 2、computed计算属性方法 页面结果: 第一种 第二种 相较于watch写法,computed写法看上去更加简洁,比如: 1、computed自身就是一种计算属性,不必再去data中新建一个属性。 2、计算属性实时更新,不用像watch方法,新建的filPerson初始值为

    2024年02月06日
    浏览(68)
  • 【VSCode】设置关键字高亮的插件 | Highlight Word

    本文主要介绍在 VSCode 看代码时,怎样使某个单词高亮显示,主要通过以下三步实现: 安装 highlight-words 插件 配置 highlight-words 插件 设置高亮快捷键F8 工作是嵌入式开发的,代码主要是C/C++的,之前一直用 source insight 4 看代码,最近转到 VSCode ,使用 VSCode 看代码时,发现它居

    2024年02月11日
    浏览(60)
  • 苏宁API接口解析,实现按关键字搜索suning商品

    苏宁API接口提供了多种搜索商品的方式,其中包括按搜索。下面是一个简单的示例,演示如何使用苏宁API接口实现按搜索商品: 请求参数 请求参数:q=鞋子start_price=end_price=page=cat=discount_only=sort=page_size=seller_info=nick=ppath= 参数说明:q:搜索 cat:分类ID start_p

    2024年02月09日
    浏览(49)
  • Vue 高德地图(@amap/amap-jsapi-loader)的基本使用:添加标记、POI关键字搜索、路线规划...(方法一)

    具体的步骤可以参考我的上一篇博客,有详细说明如何注册申请高德的Key、秘钥,初始化地图等等 vue-amap : vue-amap 基于 Vue 2.x 与高德的地图组件 高德官方介绍:地图 JS API Web服务API简介 高德Web服务API向开发者提供HTTP接口,开发者可通过这些接口使用各类型的地理数据服务,

    2024年01月18日
    浏览(50)
  • 搜索引擎优化指南:SEO关键字、长尾关键字、短尾关键字以及反向链接

    SEO 代表“搜索引擎优化”。它是一种数字营销策略,旨在提高网站或网页在搜索引擎未付费结果中的在线可见性。通常,网站在搜索结果页面中排名越高,或在搜索结果列表中显示的频率越高,它将从搜索引擎用户那里获得的访问者就越多。 SEO 策略可以针对各种类型的搜索

    2024年02月04日
    浏览(148)
  • ant-vue1.78版a-auto-complete表单自动搜索返回列表中的关键字标红

    通常在做标红的场景,都是后端返回html结构,前端直接渲染实现,但是如果需要前端处理的话,实现也是很简单的,接下来我直接上应用场景吧 应用场景就是通过去调接口,返回的列表前端去标红,接下来我们看代码 接下来就是我们接口调用后的处理逻

    2024年02月10日
    浏览(47)
  • 拼多多关键字搜索API-通过关键字获取拼多多商品列表

    pinduoduo.item_search 公共参数 请求地址: pinduoduo/item_search 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼接在URL中) secret String 是 调用密钥 api_name String 是 API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等] cache String 否 [yes,no]默认yes,将调用缓存的数据

    2024年02月22日
    浏览(82)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包