getSelection限制选取范围

2024-06-23 00:28

本文主要是介绍getSelection限制选取范围,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

// 选择容器元素
const box = document.queryselector('.box');// 监听选择事件
document.addEventListener('mouseup', (e) => {// 如果选择不在box内部,清除选择if (!box.contains(e.target)) {window.getSelection().removeAllRanges();}
});// 监听键盘事件,以防用户使用键盘进行选择
document.addEventListener('keyup', (e) => {// 检查是否有文本被选中const selection = window.getSelection();if (!box.contains(selection.anchorNode)) {selection.removeAllRanges();}
});

在自己手写富文本编辑器时通常会用到这一点

//通过vue3绑定编辑器dom
const editorRef = ref()//选中的文本
const text = ref('')
//选择器
const selection = ref({})
//位置信息
const range = ref(null)
//选中的文本所在节点
const node = ref(null)
const getContext = ()=>{selection.value = window.getSelection()if(selection.value.isCollapsed) returnif(selection.value.rangeCount <= 0) returntext.value = selection.value.toString()range.value = selection.value.getRangeAt(0)//父节点const element = range.value.commonAncestorContainer;/*过滤不是元素节点情况contains用于判断某个dom节点是否为另一个节点的子元素。用法示例:parentNode.contains(childNode)当前语句意为:当选中内容为dom且处于编辑器区域中时,获取被选中的文本所在的dom节点,并将之存入变量,如果不是dom节点那么将它的父元素存入变量。如果选中的内容超出了编辑器区域直接存入null,这样就可以起到限制getSelection()作用范围的效果。有兴趣的可以看看我写的简易版富文本编辑器,目前正在编码中后续测试无BUG后会贴出地址。*/if (element.nodeType === Node.ELEMENT_NODE && editorRef.value.contains(element)) {node.value = element} else if(editorRef.value.contains(element.parentElement)){node.value = element.parentElement}else{node.value = null}}

这篇关于getSelection限制选取范围的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1085822

相关文章

基于Python实现数字限制在指定范围内的五种方式

《基于Python实现数字限制在指定范围内的五种方式》在编程中,数字范围限制是常见需求,无论是游戏开发中的角色属性值、金融计算中的利率调整,还是传感器数据处理中的异常值过滤,都需要将数字控制在合理范围... 目录引言一、基础条件判断法二、数学运算巧解法三、装饰器模式法四、自定义类封装法五、NumPy数组处理

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

Nginx 413修改上传文件大小限制的方法详解

《Nginx413修改上传文件大小限制的方法详解》在使用Nginx作为Web服务器时,有时会遇到客户端尝试上传大文件时返回​​413RequestEntityTooLarge​​... 目录1. 理解 ​​413 Request Entity Too Large​​ 错误2. 修改 Nginx 配置2.1

Windows系统宽带限制如何解除?

《Windows系统宽带限制如何解除?》有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文就跟大家一起来看看Windows系统解除网络限制的操作方法吧... 有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.