当前位置:首页 > VUE

vue实现高亮

2026-01-12 17:54:59VUE

Vue 实现文本高亮的方法

在 Vue 中实现文本高亮可以通过多种方式完成,以下是几种常见的方法:

方法一:使用 v-html 和字符串替换

通过字符串替换将匹配的关键词包裹在 <span> 标签中,并设置样式类。注意使用 v-html 时需要确保内容安全,避免 XSS 攻击。

<template>
  <div v-html="highlightedText"></div>
</template>

<script>
export default {
  props: ['text', 'keyword'],
  computed: {
    highlightedText() {
      if (!this.keyword) return this.text;
      const regex = new RegExp(this.keyword, 'gi');
      return this.text.replace(regex, match => `<span class="highlight">${match}</span>`);
    }
  }
};
</script>

<style>
.highlight {
  background-color: yellow;
  font-weight: bold;
}
</style>

方法二:使用组件和插槽

vue实现高亮

创建一个可复用的高亮组件,通过插槽传递文本内容,组件内部处理高亮逻辑。

<template>
  <span>
    <slot></slot>
  </span>
</template>

<script>
export default {
  props: ['keyword'],
  mounted() {
    this.highlight();
  },
  methods: {
    highlight() {
      if (!this.keyword) return;
      const text = this.$el.textContent;
      const regex = new RegExp(this.keyword, 'gi');
      const highlighted = text.replace(regex, match => `<span class="highlight">${match}</span>`);
      this.$el.innerHTML = highlighted;
    }
  }
};
</script>

方法三:使用自定义指令

vue实现高亮

创建一个自定义指令,直接在元素上应用高亮效果。

Vue.directive('highlight', {
  inserted(el, binding) {
    const keyword = binding.value;
    if (!keyword) return;
    const text = el.textContent;
    const regex = new RegExp(keyword, 'gi');
    el.innerHTML = text.replace(regex, match => `<span class="highlight">${match}</span>`);
  },
  update(el, binding) {
    const keyword = binding.value;
    if (!keyword) return;
    const text = el.textContent;
    const regex = new RegExp(keyword, 'gi');
    el.innerHTML = text.replace(regex, match => `<span class="highlight">${match}</span>`);
  }
});

方法四:使用第三方库

如果需要更复杂的高亮功能,可以使用第三方库如 mark.js

import Mark from 'mark.js';

export default {
  mounted() {
    const markInstance = new Mark(this.$el);
    markInstance.mark(this.keyword, {
      className: 'highlight'
    });
  }
};

注意事项

  • 使用 v-html 时需确保内容安全,避免直接渲染用户输入的内容。
  • 高亮功能可能涉及性能问题,特别是在大文本或频繁更新的情况下。
  • 自定义指令或组件可以提供更好的复用性和灵活性。
  • 第三方库如 mark.js 提供了更多高级功能,如多关键词高亮、模糊匹配等。

标签: vue高亮
分享给朋友:

相关文章

vue实现倒计时抢券

vue实现倒计时抢券

Vue 实现倒计时抢券功能 核心逻辑 倒计时抢券功能需要结合时间计算、状态管理和界面交互。通过 Vue 的响应式特性和生命周期钩子,可以高效实现这一需求。 实现步骤 1. 数据准备 在 Vue 组件…

vue实现遮罩

vue实现遮罩

Vue 实现遮罩层的方法 在 Vue 中实现遮罩层可以通过多种方式完成,以下是几种常见的方法: 方法一:使用 v-show 或 v-if 控制显示 通过 Vue 的指令动态控制遮罩层的显示与隐藏。…

computed vue 实现

computed vue 实现

computed 在 Vue 中的基本用法 Vue 的 computed 属性用于声明依赖于其他数据的计算属性。当依赖的数据变化时,计算属性会自动重新计算并缓存结果。 export defaul…

jquery实现vue

jquery实现vue

jQuery 和 Vue.js 是两种不同理念的前端工具,jQuery 以 DOM 操作和事件驱动为核心,而 Vue.js 是数据驱动的现代化框架。如果想用 jQuery 实现类似 Vue 的功能(如…

vue 动画实现

vue 动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要分为内置组件和第三方库集成。 使用 Vue 内置过渡组件 Vue 的 <transition> 和 <transiti…

vue实现分栏

vue实现分栏

Vue实现分栏的常见方法 使用CSS Flexbox布局 通过Flexbox可以快速实现分栏效果,适合大多数响应式布局场景 <template> <div class="con…