当前位置:首页 > VUE

vue实现搜索变色

2026-01-16 23:31:09VUE

实现搜索关键词高亮的方法

在Vue中实现搜索关键词高亮显示,可以通过自定义指令或过滤器实现。以下是两种常见实现方式:

方法一:使用v-html指令

创建一个方法处理文本并替换关键词:

vue实现搜索变色

methods: {
  highlight(text, keyword) {
    if (!keyword) return text
    const regex = new RegExp(keyword, 'gi')
    return text.replace(regex, match => `<span class="highlight">${match}</span>`)
  }
}

在模板中使用:

<div v-html="highlight(content, searchKeyword)"></div>

方法二:自定义指令

vue实现搜索变色

注册全局指令:

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

使用指令:

<div v-highlight:keyword="content"></div>

样式处理

添加CSS样式控制高亮效果:

.highlight {
  background-color: yellow;
  font-weight: bold;
  color: #333;
}

注意事项

  1. 使用v-html时需注意XSS攻击风险,确保内容可信
  2. 复杂匹配场景可考虑使用第三方库如mark.js
  3. 性能优化:大量文本处理时建议使用虚拟滚动

完整组件示例

<template>
  <div>
    <input v-model="keyword" placeholder="输入关键词"/>
    <div v-html="highlightedText"></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      keyword: '',
      originalText: '这是一段需要搜索高亮的示例文本'
    }
  },
  computed: {
    highlightedText() {
      return this.highlight(this.originalText, this.keyword)
    }
  },
  methods: {
    highlight(text, keyword) {
      if (!keyword) return text
      const regex = new RegExp(keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'gi')
      return text.replace(regex, match => `<span class="highlight">${match}</span>`)
    }
  }
}
</script>

标签: vue
分享给朋友:

相关文章

vue实现拼音搜索

vue实现拼音搜索

实现拼音搜索的基本思路 拼音搜索的核心是将中文转换为拼音,并在用户输入拼音时匹配对应的中文内容。Vue中可以通过集成拼音转换库(如pinyin或pinyin-pro)实现这一功能。 安装拼音转换库…

vue点击实现排序

vue点击实现排序

实现点击排序的方法 在Vue中实现点击排序功能,可以通过以下几种方式完成: 使用计算属性结合排序方法 定义一个响应式数据存储排序状态,通过计算属性动态返回排序后的数组。点击事件切换排序状态。…

vue实现多层评论回复

vue实现多层评论回复

Vue 实现多层评论回复 数据结构设计 多层评论通常采用嵌套结构,每个评论对象包含子评论数组。示例数据结构如下: comments: [ { id: 1, content: '父…

vue查看更多怎么实现

vue查看更多怎么实现

实现 Vue 的“查看更多”功能 数据截取与显示控制 通过 v-if 或 v-show 控制内容的显示与隐藏。初始状态下只显示部分内容,点击“查看更多”后展开完整内容。 <template&…

vue播放倍速怎么实现

vue播放倍速怎么实现

实现Vue播放倍速的方法 在Vue中实现播放倍速功能通常涉及HTML5的<video>元素或第三方播放器库。以下是几种常见实现方式: 使用原生HTML5 video元素 通过ref获取…

vue实现冰墩墩

vue实现冰墩墩

使用 Vue 实现冰墩墩动画 通过 Vue 的动画特性和 SVG 技术,可以动态渲染冰墩墩的形象。以下是具体实现方法: 准备 SVG 素材 冰墩墩的形象通常由多个 SVG 路径组成,包括身体轮廓、面…