当前位置:首页 > VUE

vue实现搜索高亮

2026-01-17 02:07:44VUE

实现搜索高亮的方法

在Vue中实现搜索高亮可以通过以下步骤完成,结合字符串处理和动态样式绑定。

vue实现搜索高亮

使用字符串替换与v-html

通过将匹配的搜索词替换为带有高亮样式的HTML标签,再使用v-html渲染内容。需注意防范XSS攻击。

vue实现搜索高亮

<template>
  <div>
    <input v-model="searchText" placeholder="输入搜索词" />
    <div v-html="highlightedContent"></div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      content: "这里是需要被高亮的文本内容",
      searchText: ""
    };
  },
  computed: {
    highlightedContent() {
      if (!this.searchText) return this.content;
      const regex = new RegExp(this.searchText, 'gi');
      return this.content.replace(regex, match => 
        `<span style="background-color: yellow;">${match}</span>`
      );
    }
  }
};
</script>

使用自定义指令

封装一个自定义指令v-highlight,实现更灵活的高亮逻辑。

<template>
  <div>
    <input v-model="searchText" />
    <div v-highlight="searchText" style="background-color: yellow;">
      这里是需要被高亮的文本内容
    </div>
  </div>
</template>

<script>
export default {
  directives: {
    highlight(el, binding) {
      const text = el.textContent;
      const searchText = binding.value;
      if (!searchText) {
        el.innerHTML = text;
        return;
      }
      const regex = new RegExp(searchText, 'gi');
      el.innerHTML = text.replace(regex, match => 
        `<span style="background-color: yellow;">${match}</span>`
      );
    }
  },
  data() {
    return { searchText: "" };
  }
};
</script>

结合第三方库

使用如mark.js等库简化高亮逻辑,适合复杂场景。

npm install mark.js
<template>
  <div>
    <input v-model="searchText" />
    <div ref="content">
      这里是需要被高亮的文本内容
    </div>
  </div>
</template>

<script>
import Mark from 'mark.js';
export default {
  data() {
    return { searchText: "" };
  },
  watch: {
    searchText(newVal) {
      const mark = new Mark(this.$refs.content);
      mark.unmark();
      if (newVal) mark.mark(newVal);
    }
  }
};
</script>

注意事项

  • XSS防护:使用v-html时确保内容可信,或通过库如DOMPurify过滤。
  • 性能优化:大数据量时考虑防抖(如lodash.debounce)减少频繁渲染。
  • 样式定制:通过CSS类替代内联样式,便于统一管理。

以上方法可根据项目需求选择,平衡灵活性与维护性。

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

相关文章

vue实现分支

vue实现分支

Vue 实现分支的方法 在 Vue 项目中实现分支功能通常涉及条件渲染、动态组件或路由控制。以下是几种常见的实现方式: 条件渲染(v-if/v-show) 使用 Vue 的指令根据条件显示不同内容…

vue登录业务的实现

vue登录业务的实现

实现登录业务的基本流程 在Vue中实现登录业务通常涉及前端界面设计、表单验证、API请求交互、状态管理以及路由控制等环节。以下是核心实现步骤: 登录表单设计与验证 创建包含用户名和密码输入框的登录…

vue实现继承语法糖

vue实现继承语法糖

在Vue中实现继承可以通过多种方式模拟类继承的效果,以下是常见的几种方法: 使用mixins实现逻辑复用 通过Vue的mixins机制共享组件选项,达到类似继承的效果: const Bas…

vue设计与实现下载

vue设计与实现下载

vue设计与实现电子书下载 《Vue.js设计与实现》是一本深入解析Vue.js框架原理的书籍,由霍春阳(HcySunYang)撰写。以下是获取该资源的常见途径: 正版购买渠道 京东、…

vue 实现pc

vue 实现pc

Vue 实现 PC 端应用的核心要点 Vue.js 是一个渐进式框架,适合构建 PC 端单页应用(SPA)或复杂的前端界面。以下是实现 PC 端应用的关键方法和注意事项: 项目初始化与工程化配置…

vue实现功能

vue实现功能

Vue 功能实现方法 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。以下是实现常见功能的几种方法: 数据绑定与响应式更新 在 Vue 中,数据绑定通过 v-model…