美文网首页
光标选区API Selection

光标选区API Selection

作者: 溪离欣洛 | 来源:发表于2017-02-12 14:34 被阅读162次

兼容性

IE9以上基本都已经支持该API

Paste_Image.png

selection 实例

  • 获取selction window.selection方法
  • anchor 用户操作开始的地方
  • focus 用户操作结束的地方
  • range 是包含element文本节点的html片段,通常来说用户选择的selection 包含一个range实例, 多实例的功能只有火狐支持。

实例属性

属性名称 类型 描述
anchorNode NodeElement 用户选择区域开始的节点
anchorOffset Number 如果anchorNode是文本节点,anchorOffset表示用户选择开始的字符相对节点内容首个字符的偏移,如果是element 则表示,该节点相对element子元素的位置。
forcusNode NodeElement 用户选择区域结束的节点
forcusOffset Number 如果forcusNode是文本节点,forcusOffset表示用户选择开始的字符相对节点内容首个字符的偏移,如果是element 则表示,该节点相对element子元素的位置。
isCollapsed Boolean 用户操作的起始点和终点是否重合(可以用来判断是否是有效操作,为true时表示取消操作)
rangeCount Number 返回选区内range的个数

实例方法

下面介绍的方法是chrome已经支持的方法

  • getRangeAt() 返回 当全选中的range对象中的某一个
  • collapse(parentNode, offset)销毁现有的selection 实例并用 parentNode.childNodes[offset]作为anchorfocus生成新的selection来替换。
  • extend(parentNode, offset) 移动focus到指定位置不改变anchor
var sel = window.getSelection();
sel.extend(sel.focusNode, sel.focusOffset + 5);
  • selectAllChildren(parentNode) parentNode的所有子元素被加入到selection中替换掉了原有的。
  • deleteFromDocument() 从document中删除
  • toString 返回当前被选中的内容的文本
  • containsNode(aNode,aPartlyContained) 表明文本aNode是否在Seleciton中 aPartlyContained === false 要求aNode必须在seleciton中 aPartlyContained === true 部分在即可
window.getSelection().containsNode(document.body, true)
>>true

复制内容到剪贴板

// preViewEl: HTMLParagraphElement;
copy = (e: Event) => {
   let range,
       selection;
   try{
       selection = window.getSelection();
       range = document.createRange();
       range.selectNodeContents(this.preViewEl);
       selection.removeAllRanges();
       selection.addRange(range);
       document.execCommand('copy');
       this.preViewEl.blur();
   }catch(e){
       debugger;
   }
}

注意
preViewEl 一定是需要展示在页面上的元素,不能使用display隐藏, 可以定位到可视区域的外面。

// 双击复制内容组件

// @flow
import React, { Component } from 'react';

class SelectAllText extends Component{
    props: {
        children: ReactElement
    };
    rootEl: HTMLDivElement;
    select = (e) =>{
        try{
            const selection = window.getSelection();
            const range = document.createRange();
            const targetEl = this.rootEl.firstElementChild;
            if (!targetEl) return;
            range.selectNodeContents(targetEl);
            selection.removeAllRanges();
            selection.addRange(range);
            document.execCommand('copy');
            targetEl.blur();
        }catch(e){
            $.message.show({
                type: 'error',
                msg: '复制内容到剪贴板失败'
            })
        }
    }
    render(){
        return (
            <div onDoubleClick={this.select} ref={el => this.rootEl = el}>
                {this.props.children}
            </div>
        )
    }
}
export default SelectAllText;

相关文章

  • 光标选区API Selection

    兼容性 IE9以上基本都已经支持该API selection 实例 获取selction window.selec...

  • 21.矩形选框工具二

    “添加到选区”不可以移动选区。不管是放在选区里面还是放在选区外面。他的光标始终是两个加号。说明不能够移动选区。如果...

  • wangEditor 自定义字号fontSize插件 突破最多7

    原理就是根据文档当前选区 获取所有选区内的节点 然后对节点设置字体大小 不支持IE IE没有Selection.c...

  • d3之操作元素

    selection.(api)列表 1.selection.attr() 设置或者获取属性。获取属性--selec...

  • vim使用

    模式 正常模式 按i、a进入插入模式-按v进入选区模式 快捷键 i在光标前面插入,大写在行首插入 a在光标后面插入...

  • Js光标对象selection的使用

    document.selection : IEwindow.getSelection() :Chrome、Safa...

  • 20190716MySQL基础操作(一)

    一、基础知识 1、注释方法 :--+空格 或 # 2、闪电I执行光标所处命令最近的;截止的语句或所选区域...

  • 日更第2天 PS选区工具

    比较好玩的一个概念:选区,选区工具画选区,但是不是所有的选区都是选区工具画出来的。 选区就是蚂蚁线,选区很重要!重...

  • Qt Creator基础使用篇

    快速查看一个类的帮助文档(API说明) 1 将光标置于当前类上,Fn+F12 将光标置于当前类上->帮助菜单->上...

  • Photoshop CC 2019学习笔记day2

    撤销选区:当你选定选区后想要取消,可以在选区中间右击鼠标,点击“取消选择”; 移动选区:选定选区后,点击移动工具,...

网友评论

      本文标题:光标选区API Selection

      本文链接:https://www.haomeiwen.com/subject/tseaittx.html