)。…">
当前位置:首页 > VUE

vue实现搜索高亮显示

2026-01-22 13:32:19VUE

实现搜索高亮的基本思路

在Vue中实现搜索高亮的核心逻辑是通过正则表达式匹配关键词,并将匹配到的内容替换为带有高亮样式的HTML标签(如<span class="highlight">)。需要结合Vue的数据绑定和动态渲染特性。

定义高亮样式

在CSS中定义高亮样式,例如:

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

创建高亮方法

在Vue组件中定义一个方法,用于处理文本并返回高亮后的HTML字符串:

vue实现搜索高亮显示

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

模板中使用高亮

在模板中通过v-html指令渲染高亮后的内容(注意防范XSS风险):

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

处理多关键词高亮

若需支持多关键词高亮,可扩展高亮方法:

vue实现搜索高亮显示

highlightText(text, keywords) {
  if (!keywords) return text;
  const keywordArray = keywords.split(' ');
  let result = text;
  keywordArray.forEach(keyword => {
    if (keyword) {
      const regex = new RegExp(keyword, 'gi');
      result = result.replace(regex, match => `<span class="highlight">${match}</span>`);
    }
  });
  return result;
}

安全性注意事项

使用v-html时需确保内容可信,避免XSS攻击。可通过DOMPurify等库过滤危险内容:

import DOMPurify from 'dompurify';
// ...
highlightText(text, keyword) {
  const highlighted = /* 高亮逻辑 */;
  return DOMPurify.sanitize(highlighted);
}

性能优化建议

对于大量文本的高亮操作,可通过以下方式优化:

  • 使用防抖(debounce)延迟高亮计算
  • 避免在每次输入时重新处理整个文本
  • 考虑虚拟滚动技术处理长列表

完整组件示例

<template>
  <div>
    <input v-model="searchKeyword" placeholder="输入搜索关键词" />
    <div v-html="safeHighlightedText"></div>
  </div>
</template>

<script>
import DOMPurify from 'dompurify';

export default {
  data() {
    return {
      originalText: '这是一段需要高亮显示的示例文本,包含多个关键词。',
      searchKeyword: ''
    };
  },
  computed: {
    safeHighlightedText() {
      return DOMPurify.sanitize(this.highlightText(this.originalText, this.searchKeyword));
    }
  },
  methods: {
    highlightText(text, keyword) {
      if (!keyword) return text;
      const regex = new RegExp(keyword, 'gi');
      return text.replace(regex, match => `<span class="highlight">${match}</span>`);
    }
  }
};
</script>

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

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

相关文章

vue中如何实现循环

vue中如何实现循环

在 Vue 中实现循环 Vue 提供了 v-for 指令用于实现循环渲染列表数据。v-for 可以遍历数组、对象或数字范围,生成动态的 DOM 元素。 遍历数组 使用 v-for 遍历数组时,语法…

vue实现活动倒计时

vue实现活动倒计时

实现活动倒计时的基本思路 在Vue中实现活动倒计时通常需要获取当前时间与活动结束时间的差值,并将其转换为天、小时、分钟、秒的格式展示。通过定时器每秒更新显示的时间。 定义倒计时数据 在Vue组件的…

vue实现密码框的包

vue实现密码框的包

Vue 密码框实现方案 在 Vue 中实现密码框功能,可以通过原生 HTML 结合 Vue 指令或使用第三方组件库完成。以下是几种常见方案: 原生 HTML + Vue 双向绑定 <t…

vue实现右下角弹框

vue实现右下角弹框

实现右下角弹框的基本思路 在Vue中实现右下角弹框,通常需要结合CSS定位和Vue的组件化特性。弹框可以通过绝对定位固定在右下角,并通过Vue控制其显示与隐藏。 创建弹框组件 新建一个Vue组件(…

vue实现视窗

vue实现视窗

Vue 实现视窗功能 在 Vue 中实现视窗功能通常涉及监听浏览器窗口大小变化、响应式布局或创建自定义弹窗组件。以下是几种常见实现方式: 监听浏览器窗口大小变化 使用 Vue 的 mounted…

vue实现付款

vue实现付款

Vue 实现付款功能 在 Vue 中实现付款功能通常需要集成第三方支付网关(如支付宝、微信支付、Stripe 等)。以下是常见的实现方法: 集成支付宝/微信支付 安装必要的依赖(如 axios 用于…