当前位置:首页 > 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实现文件预览功能可以通过多种方式完成,具体取决于文件类型(图片、PDF、视频等)。以下是几种常见文件类型的实现方案。 图片预览 通过<input type…

vue为啥能实现监听

vue为啥能实现监听

Vue 实现监听的原理 Vue 的监听能力主要基于其响应式系统,该系统通过数据劫持和依赖收集实现。当数据变化时,系统能自动触发视图更新或执行回调函数。 核心机制:Object.defineProp…

vue实现简单的弹窗

vue实现简单的弹窗

使用 Vue 实现简单弹窗 组件基础结构 创建一个名为 Modal.vue 的组件文件,包含模板、脚本和样式部分: <template> <div class="modal-…

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue.js…

vue使用vr实现标注

vue使用vr实现标注

Vue 中使用 VR 实现标注的方法 在 Vue 项目中结合 VR 技术实现标注功能,可以通过 WebXR 和 Three.js 等库实现。以下为具体实现方法: 安装依赖 确保项目中已安装 Thre…

用vue实现滑动输入条

用vue实现滑动输入条

使用 Vue 实现滑动输入条 使用原生 HTML5 input range 实现 在 Vue 模板中直接使用 <input type="range">,通过 v-model 绑定数据:…