当前位置:首页 > VUE

vue实现搜索变色

2026-02-17 16:04:55VUE

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

在Vue中实现搜索关键词高亮显示,可以通过以下方式实现:

使用v-html指令

<template>
  <div>
    <input v-model="searchText" placeholder="输入搜索关键词">
    <div v-html="highlightText(originalText)"></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      originalText: '这是一段需要高亮显示的文本内容',
      searchText: ''
    }
  },
  methods: {
    highlightText(text) {
      if (!this.searchText) return text
      const regex = new RegExp(this.searchText, 'gi')
      return text.replace(regex, match => 
        `<span style="background-color: yellow">${match}</span>`
      )
    }
  }
}
</script>

使用计算属性优化

computed: {
  highlightedContent() {
    const searchTerm = this.searchText.trim()
    if (!searchTerm) return this.originalText

    const regex = new RegExp(searchTerm, 'gi')
    return this.originalText.replace(regex, 
      match => `<span class="highlight">${match}</span>`
    )
  }
}

添加CSS样式

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

安全注意事项

使用v-html时需注意XSS攻击风险,应对输入内容进行转义处理:

methods: {
  escapeHtml(unsafe) {
    return unsafe
      .replace(/&/g, "&amp;")
      .replace(/</g, "&lt;")
      .replace(/>/g, "&gt;")
      .replace(/"/g, "&quot;")
      .replace(/'/g, "&#039;")
  },
  highlightText(text) {
    const safeText = this.escapeHtml(text)
    const safeSearch = this.escapeHtml(this.searchText)
    // ...后续高亮逻辑
  }
}

支持多关键词高亮

如需支持多个关键词高亮显示:

vue实现搜索变色

highlightText(text) {
  if (!this.searchText) return text

  const keywords = this.searchText.split(' ').filter(k => k)
  let result = text

  keywords.forEach(keyword => {
    const regex = new RegExp(keyword, 'gi')
    result = result.replace(regex, 
      match => `<span class="highlight">${match}</span>`
    )
  })

  return result
}

性能优化建议

对于大量文本内容,考虑使用虚拟滚动技术或分页显示,避免一次性处理过多DOM节点导致性能问题。

标签: vue
分享给朋友:

相关文章

vue实现过滤

vue实现过滤

Vue实现过滤的方法 在Vue中实现数据过滤可以通过多种方式完成,以下是几种常见的方法: 使用计算属性过滤 计算属性是Vue中处理数据过滤的理想选择,它们基于响应式依赖进行缓存,只有在相关依赖发生改…

vue实现滚屏

vue实现滚屏

实现滚屏的基本方法 在Vue中实现滚屏效果可以通过多种方式完成,常见的有原生JavaScript滚动方法、第三方库或CSS动画。以下是几种常见实现方式: 使用window.scrollTo或Elem…

vue实现音乐

vue实现音乐

Vue实现音乐播放功能 使用Vue实现音乐播放功能可以通过多种方式完成,以下是几种常见的实现方法: 使用HTML5 Audio API 在Vue组件中直接使用HTML5的Audio对象来控制音乐播放…

vue实现回顶部

vue实现回顶部

实现方法一:使用 window.scrollTo 在Vue组件中,可以通过调用 window.scrollTo 方法平滑滚动到页面顶部。该方法接受一个配置对象,指定滚动行为为平滑(smooth)。…

vue 实现多选框

vue 实现多选框

Vue 实现多选框的方法 使用 v-model 绑定数组 在 Vue 中,可以通过 v-model 绑定一个数组来实现多选框的选择功能。每个复选框的 value 属性会被添加到数组中,取消勾选时则从数…

vue router 实现onshow

vue router 实现onshow

Vue Router 实现 onShow 功能 Vue Router 本身没有直接提供 onShow 这样的生命周期钩子,但可以通过以下方法模拟类似功能。 使用导航守卫 导航守卫可以在路由切换时触发…