vue使用advanced-mark.js实现高亮文字效果

 更新时间:2025年08月08日 10:10:27   作者:__爱吃香菜  
在日常项目中我们往往会有搜索高亮的需求,下面这篇文章主要介绍了vue使用advanced-mark.js实现高亮文字效果的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

组件介绍-advanced-mark.js:

advanced-mark.js 是一个用于 Vue 的高亮文字组件,它可以帮助你在文本中高亮显示指定的关键词或短语。
组件地址:https://angezid.github.io/advanced-mark.js/doc-v2/getting-started.html

  • 主要功能:
  • 关键词高亮:在文本中高亮显示一个或多个关键词
  • 多关键词支持:可以同时高亮多个不同的关键词
  • 自定义样式:允许自定义高亮部分的样式
  • 大小写敏感选项:可选择是否区分大小写
  • 正则表达式支持:支持使用正则表达式进行复杂匹配
  • 可以设置css名称进行限制高亮区域

下载安装:

npm install advanced-mark.js

yarn add advanced-mark.js

要初始化新实例,必须使用:

var instance = new Mark(context);
instance.mark('lorem');

使用方法介绍:

  • element 【string】:获取document,通过document.getElementById()或document.querySelector()获取的单个元素,或document.querySelectorAll()获取节点列表,包含多个单个元素的数组(请注意,在内部,数组按元素在文档中的位置排序)
    字符串选择器(内部调用document.querySelectorAll())
    :const allNodes =document.querySelectorAll(selector));
  • className 【string】:标记元素的自定义类。
  • separateWordSearch【boolean or string】:当它设置为true时,如果搜索字符串包含多个单词,它会将字符串按空格拆分为单独的单词,并突出显示单个单词而不是整个字符串。
    它也适用于搜索数组中的每个字符串。
    当它设置为“separateWordSearch ”时,它会保留双引号周围的术语,防止它们分成单独的单词。
    当设置为‘false’的时候,指定将术语不分解为单独的单词。
  • diacritics【boolean】:是否匹配变音字符。
  • caseSensitive【boolean】:是否搜索区别大小写。
  • accuracy【string or object】:两种模式值,
    -字符串模式:
    partially:部分匹配,例如搜索"a"时,会高亮所有包含该字母的单词(如"and"、“back"中 的"a”)。
    exactly:强制精确匹配,默认通过空格或文本节点的起止位置作为边界(需配合acrossElements选项使用)。
    startsWith:前缀匹配,例如搜索"pre"会完整高亮以该前缀开头的单词(如"prefix"、“predict”)。
    complementary:互补匹配,例如搜索"a"时,仅高亮完整包含该字符且未被边界分隔的单词(如"and"、“visa”)。
    -对象模式:
    通过 value 指定匹配模式(必须为上述四个字符串值之一)
    通过 limiters 自定义边界字符,例如:
    { value: "exactly", limiters: ",.;:?!'\"()" }
    
  • wildcards【string】:匹配空格,enabled 模式忽略空格;withSpaces 模式允许空格作为有效字符;disabled 完全禁用通配符功能;
  • ignoreJoiners【boolean】:是否查找包含软连字符、零宽度空格、零宽度非连接符和零宽度连接符的匹配项。
  • synonyms【object】:该对象用于建立词汇间的双向/单向关联关系,支持两种配置形式:
  • each:每个标记元素的回调。
    例:
    each: function (markElement, eachInfo) {
    // markElement:当前被高亮的 DOM 元素。
    // eachInfo:包含匹配信息的对象,其中 eachInfo.match[0] 是匹配到的关键词
    const keyword = eachInfo.match[0];
    markElement.style.backgroundColor =
    keywordColors[keyword] || '#FBD1D5';
     }
    

注: 如果想要多个部分分散使用高亮功能,那么可以使用数组形式进行存储,并遍历循环。

const  classNames=['.css1','.css2','.css3',...]
   const allNodes = classNames.flatMap((selector) =>
      document.querySelectorAll(selector));
    allNodes.forEach((node) => {
      // 在指定的 DOM 元素中查找并高亮指定的关键词
      const instance = new Mark(node); //new一个新对象
      instance.unmark(); // 清除之前的标记
        instance.mark(highlightKeywords[注:接受高亮词的数组], {
          separateWordSearch: false, // false指定将术语不分解为单独的单词
          each: function (markElement, eachInfo) {
            // markElement:当前被高亮的 DOM 元素。
            // eachInfo:包含匹配信息的对象,其中 eachInfo.match[0] 是匹配到的关键词
            const keyword = eachInfo.match[0];
            markElement.style.backgroundColor =
              keywordColors[keyword] || '#FBD1D5';// 设置颜色和默认颜色
          }
        });
    });

组件产出效果:

总结 

到此这篇关于vue使用advanced-mark.js实现高亮文字效果的文章就介绍到这了,更多相关vue高亮文字效果内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue2.0实现音乐/视频播放进度条组件

    vue2.0实现音乐/视频播放进度条组件

    这篇文章主要为大家详细介绍了vue2.0实现音乐和视频播放进度条组件的思路及具体实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • vue+echarts实现条纹柱状横向图

    vue+echarts实现条纹柱状横向图

    这篇文章主要为大家详细介绍了vue+echarts实现条纹柱状横向图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • vue-cli3 karma单元测试的实现

    vue-cli3 karma单元测试的实现

    这篇文章主要介绍了vue-cli3 karma单元测试的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 详解input组合事件如何监听输入中文

    详解input组合事件如何监听输入中文

    这篇文章主要为大家介绍了input组合事件如何监听输入中文示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • vue使用swiper.js重叠轮播组建样式

    vue使用swiper.js重叠轮播组建样式

    这篇文章主要为大家详细介绍了vue使用swiper.js重叠轮播组建样式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Vue中video标签如何实现不静音自动播放

    Vue中video标签如何实现不静音自动播放

    最近在做大屏展示需要在一开始播放引导视频,产生自动播放需求,下面这篇文章主要给大家介绍了关于Vue中video标签如何实现不静音自动播放的相关资料,需要的朋友可以参考下
    2023-01-01
  • vue使用 vue-socket.io三种方式及踩坑实例解析

    vue使用 vue-socket.io三种方式及踩坑实例解析

    这篇文章主要为大家介绍了vue使用 vue-socket.io三种方式及踩坑实例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • vue实现登录拦截

    vue实现登录拦截

    这篇文章主要介绍了vue实现登录拦截,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • JavaScript之Vue.js【入门基础】

    JavaScript之Vue.js【入门基础】

    本文主要介绍一下Vue.js并附上在Node.js环境下搭建一个简单的Demo实例代码。条理清晰,有助于阅读和理解。有需要的朋友可以看下
    2016-12-12
  • Vue发布订阅模式实现过程图解

    Vue发布订阅模式实现过程图解

    这篇文章主要介绍了Vue发布订阅模式实现过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04

最新评论