当前位置:首页 > 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 实现href

vue 实现href

Vue 实现 href 的方法 在 Vue 中实现 href 功能可以通过多种方式,具体取决于需求场景。以下是几种常见的方法: 使用 <a> 标签 直接使用 HTML 的 <a&g…

vue 实现搜索

vue 实现搜索

实现 Vue 搜索功能 在 Vue 中实现搜索功能通常涉及以下几个关键步骤: 数据绑定与输入监听 使用 v-model 双向绑定搜索输入框的值,监听用户输入: <template>…

vue远离实现

vue远离实现

Vue 原理实现 Vue.js 的核心原理包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现原理的详细解析。 响应式系统 Vue 的响应式系统基于 Object.definePro…

vue实现图片查看

vue实现图片查看

Vue 实现图片查看功能 在 Vue 中实现图片查看功能,可以通过原生实现或使用第三方库。以下是几种常见的方法: 原生实现方式 使用 Vue 的指令和事件绑定实现基础的图片查看功能。 <te…

vue实现全选下载

vue实现全选下载

Vue实现全选下载功能 全选下载功能通常涉及前端文件列表的多选操作和批量下载逻辑。以下是基于Vue的实现方案: 数据准备与渲染 在Vue组件中定义文件列表数据和选中状态: data() { r…

vue嵌套grafana实现

vue嵌套grafana实现

Vue 中嵌套 Grafana 的实现方法 使用 iframe 嵌入 Grafana 面板 在 Vue 项目中可以通过 iframe 直接嵌入 Grafana 的面板或仪表板。确保 Grafana 已…