当前位置:首页 > VUE

vue实现文本选取

2026-02-17 11:18:01VUE

Vue 实现文本选取的方法

使用原生 JavaScript 事件

通过 @mouseup@touchend 事件监听用户操作,结合 window.getSelection() 获取选中文本。在 Vue 模板中添加事件监听:

<template>
  <div @mouseup="handleTextSelection">
    {{ content }}
  </div>
</template>

<script>
export default {
  methods: {
    handleTextSelection() {
      const selection = window.getSelection();
      if (selection.toString().length > 0) {
        console.log('Selected text:', selection.toString());
      }
    }
  }
}
</script>

自定义指令封装

创建 Vue 指令 v-selection 实现复用:

Vue.directive('selection', {
  bind(el, binding) {
    el.addEventListener('mouseup', () => {
      const selection = window.getSelection();
      if (selection.toString().length > 0) {
        binding.value(selection.toString());
      }
    });
  }
});

使用指令:

<div v-selection="handleSelectedText">
  {{ longTextContent }}
</div>

处理跨元素选中

当文本跨越多行或多元素时,需要使用 Range API 增强处理:

methods: {
  getSelectedText() {
    const selection = window.getSelection();
    if (selection.rangeCount > 0) {
      const range = selection.getRangeAt(0);
      return {
        text: range.toString(),
        startOffset: range.startOffset,
        endOffset: range.endOffset
      };
    }
    return null;
  }
}

选中文本高亮显示

结合 CSS 类实现视觉反馈:

::selection {
  background-color: #b3d4fc;
  color: #000;
}

或通过动态类名:

<span :class="{ 'highlight': isSelected(textChunk) }">
  {{ textChunk }}
</span>

第三方库方案

使用专门库如 vue-highlight-text

import VueHighlightText from 'vue-highlight-text';

Vue.use(VueHighlightText);

模板使用:

<vue-highlight-text 
  :queries="highlightTerms"
  :text="fullText"
  @selection="handleSelection"
/>

移动端兼容处理

添加触摸事件支持:

mounted() {
  this.$el.addEventListener('touchend', this.handleTouchSelection);
},
methods: {
  handleTouchSelection() {
    setTimeout(() => {
      const selection = window.getSelection();
      // 处理选中结果
    }, 100);
  }
}

vue实现文本选取

标签: 文本vue
分享给朋友:

相关文章

vue插槽实现

vue插槽实现

插槽的基本概念 Vue插槽(Slot)是一种内容分发机制,允许父组件向子组件传递模板片段,子组件通过<slot>标签定义接收位置。插槽的核心作用是增强组件的灵活性和复用性。 默认插槽…

vue路由实现

vue路由实现

Vue 路由实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的基本实现步骤和核心功能。 安装 Vue Router 通过…

vue实现切换

vue实现切换

Vue 实现切换功能的方法 在 Vue 中实现切换功能可以通过多种方式实现,以下是一些常见的方法: 使用 v-if 和 v-else 指令 通过条件渲染实现切换功能,适用于简单的显示/隐藏场景…

vue  实现tab

vue 实现tab

实现 Tab 切换功能 在 Vue 中实现 Tab 切换功能可以通过动态组件或条件渲染完成。以下是两种常见方法: 使用 v-if 或 v-show 实现条件渲染 通过绑定 currentTab 变量…

vue 实现筛选

vue 实现筛选

实现筛选功能的基本方法 在Vue中实现筛选功能通常涉及以下几个核心步骤: 数据绑定与筛选逻辑 使用v-model绑定筛选条件到Vue实例的数据属性,结合计算属性实现动态筛选: data() {…

vue 实现树状

vue 实现树状

Vue 实现树状结构的方法 递归组件实现树状结构 递归组件是 Vue 中实现树状结构的常见方法。通过组件自身调用自身,可以轻松构建多层级树状结构。 <template> <u…