当前位置:首页 > VUE

vue实现搜索文字变色

2026-02-24 23:01:29VUE

实现搜索文字变色的方法

在Vue中实现搜索文字变色功能,可以通过以下步骤完成:

方法一:使用v-html和正则表达式替换

vue实现搜索文字变色

<template>
  <div>
    <input v-model="searchText" placeholder="输入搜索内容" />
    <div v-html="highlightedText"></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      originalText: '这是一段需要搜索的文本内容,可以包含多个关键词',
      searchText: ''
    }
  },
  computed: {
    highlightedText() {
      if (!this.searchText) return this.originalText
      const regex = new RegExp(this.searchText, 'gi')
      return this.originalText.replace(regex, match => 
        `<span style="background-color: yellow; color: black">${match}</span>`
      )
    }
  }
}
</script>

方法二:使用自定义指令

<template>
  <div>
    <input v-model="searchText" placeholder="输入搜索内容" />
    <div v-highlight="searchText">{{ originalText }}</div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      originalText: '这是一段需要搜索的文本内容,可以包含多个关键词',
      searchText: ''
    }
  },
  directives: {
    highlight: {
      inserted(el, binding) {
        el.innerHTML = el.textContent.replace(
          new RegExp(binding.value, 'gi'),
          match => `<span style="background-color: yellow">${match}</span>`
        )
      },
      update(el, binding) {
        el.innerHTML = el.textContent.replace(
          new RegExp(binding.value, 'gi'),
          match => `<span style="background-color: yellow">${match}</span>`
        )
      }
    }
  }
}
</script>

方法三:使用组件封装

vue实现搜索文字变色

创建一个可重用的HighlightText组件:

<template>
  <span v-html="processedText"></span>
</template>

<script>
export default {
  props: {
    text: String,
    query: String
  },
  computed: {
    processedText() {
      if (!this.query) return this.text
      const regex = new RegExp(this.query, 'gi')
      return this.text.replace(regex, match => 
        `<span style="background-color: yellow">${match}</span>`
      )
    }
  }
}
</script>

使用方法:

<template>
  <div>
    <input v-model="searchText" />
    <HighlightText :text="originalText" :query="searchText" />
  </div>
</template>

注意事项

  • 使用v-html时要注意XSS攻击风险,确保内容来源可信
  • 对于大量文本的搜索高亮,考虑使用虚拟滚动优化性能
  • 可以扩展高亮样式,支持多种颜色和样式配置
  • 考虑添加区分大小写的选项,增强搜索灵活性

标签: 文字vue
分享给朋友:

相关文章

vue实现查询替换

vue实现查询替换

Vue 实现查询替换功能 在 Vue 中实现查询替换功能,可以通过数据绑定和字符串操作方法结合实现。以下是具体实现方式: 基础实现 <template> <div>…

vue自己实现下拉导航

vue自己实现下拉导航

实现下拉导航的基本思路 在Vue中实现下拉导航,可以通过结合Vue的响应式数据和事件绑定特性来完成。主要思路是利用v-show或v-if控制下拉菜单的显示与隐藏,并通过鼠标事件或点击事件触发状态变化。…

vue实现键盘

vue实现键盘

Vue 实现键盘功能 在Vue中实现键盘功能通常涉及监听键盘事件、处理输入以及渲染虚拟键盘界面。以下是几种常见的实现方式: 监听键盘事件 通过@keydown或@keyup指令监听键盘事件,适用于需…

vue实现groupbox

vue实现groupbox

Vue 实现 GroupBox 组件 在 Vue 中实现类似 GroupBox 的效果可以通过自定义组件完成。GroupBox 通常是一个带有标题的边框容器,用于将相关控件分组显示。 基本实现方法…

vue实现多选

vue实现多选

Vue 实现多选功能 在 Vue 中实现多选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定到一个数组,可以实现多选功能。适用于复选框组(…

lua 实现vue

lua 实现vue

在 Lua 中实现类似 Vue 的响应式框架需要模拟 Vue 的核心功能,包括数据绑定、模板渲染和依赖追踪。以下是实现的关键思路和代码示例: 响应式数据绑定 使用 Lua 的 __index 和 _…