当前位置:首页 > VUE

vue实现高亮显示

2026-01-19 13:44:04VUE

Vue 实现高亮显示的方法

在 Vue 中实现高亮显示通常涉及文本匹配和样式动态切换。以下是几种常见实现方式:

使用 v-html 和字符串替换

通过替换目标文本为带样式的 HTML 实现高亮:

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

<script>
export default {
  data() {
    return {
      originalText: 'This is a sample text for highlighting',
      searchTerm: 'sample'
    }
  },
  computed: {
    highlightedText() {
      return this.originalText.replace(
        new RegExp(this.searchTerm, 'gi'),
        match => `<span class="highlight">${match}</span>`
      )
    }
  }
}
</script>

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

使用自定义指令

创建可复用的高亮指令:

Vue.directive('highlight', {
  inserted(el, binding) {
    const text = el.textContent
    const term = binding.value
    const regex = new RegExp(term, 'gi')
    el.innerHTML = text.replace(regex, match => 
      `<span style="background-color: yellow">${match}</span>`
    )
  }
})

// 使用方式
<div v-highlight="'search term'">Some text containing search term</div>

基于组件的高亮方案

创建可复用的高亮组件:

<template>
  <span>
    <span v-for="(part, index) in parts" :key="index" :class="{ highlight: part.highlight }">
      {{ part.text }}
    </span>
  </span>
</template>

<script>
export default {
  props: ['text', 'query'],
  computed: {
    parts() {
      const regex = new RegExp(`(${this.query})`, 'gi')
      return this.text.split(regex).map(part => ({
        text: part,
        highlight: regex.test(part)
      }))
    }
  }
}
</script>

使用第三方库

考虑使用专门的高亮库如 mark.js

npm install mark.js

// 组件中使用
import Mark from 'mark.js'

export default {
  methods: {
    highlight() {
      const instance = new Mark(this.$refs.highlightContainer)
      instance.mark(this.searchTerm, {
        className: 'highlight'
      })
    }
  },
  mounted() {
    this.highlight()
  }
}

动态样式绑定

对于简单场景可使用动态 class 绑定:

<template>
  <span :class="{ 'text-yellow': shouldHighlight }">
    {{ text }}
  </span>
</template>

<script>
export default {
  props: ['text', 'shouldHighlight']
}
</script>

每种方法适用于不同场景,v-html 方案适合简单替换,自定义指令提供更好的复用性,组件方案更灵活,第三方库适合复杂高亮需求。注意使用 v-html 时需防范 XSS 风险,对用户输入内容进行适当过滤。

vue实现高亮显示

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

相关文章

vue实现本地数据存储

vue实现本地数据存储

使用 localStorage 或 sessionStorage Vue 中可以直接调用浏览器提供的 localStorage 或 sessionStorage API 进行数据存储。localSto…

vue实现批量

vue实现批量

Vue 实现批量操作的方法 在 Vue 中实现批量操作通常涉及选择多个项目并执行统一处理,例如批量删除、批量更新等。以下是几种常见实现方式: 表格多选批量操作 使用 el-table 配合复选框实…

vue实现登出

vue实现登出

实现Vue登出功能 登出功能通常涉及清除用户会话、令牌或本地存储的数据,并重定向到登录页面。以下是几种常见的实现方式: 清除用户令牌和状态 在Vuex的store中定义一个logout mutat…

vue实现hover

vue实现hover

Vue 实现 hover 效果的方法 在 Vue 中实现 hover 效果可以通过多种方式实现,包括使用 CSS、Vue 指令或事件监听。以下是几种常见的方法: 使用 CSS :hover 伪类 通…

vue实现节流

vue实现节流

vue实现节流的方法 在Vue中实现节流(throttle)功能,通常用于限制高频事件的触发频率,例如滚动、输入或按钮点击。以下是几种常见的实现方式: 使用Lodash的throttle函数 安装L…

vue实现全屏

vue实现全屏

Vue 实现全屏功能的方法 在 Vue 中实现全屏功能可以通过浏览器提供的 Fullscreen API 来实现。以下是几种常见的实现方式: 使用原生 Fullscreen API 通过调用 doc…