分享缓存的光标选区range变量指向被莫名修改的经历

本文源自道招网的《分享缓存的光标选区range变量指向被莫名修改的经历》

有时我们在做文本输入的时候,经常会需要缓存用户上次输入时的鼠标光标位置,这里就会用到Selection和Range的知识。

前置知识简述

我们在鼠标进行选中文字(不选择也行,点击几个),是可以有API获取当前鼠标的位置信息

通过window.getSelection().getRangeAt(0)获取当前的第一个选区,里面的commonAncestorContainer 就是当前选区的最近的共同父级节点。如果我恩选中多个节点的内容,比如选区包含一个div、一个img和另外一个div,那样这个commonAncestorContainer 就是这三个节点最近的父级节点,比如另一个div。

举例

我们选中了"日期"这两个字,用变量r记录选区range信息。

ini 复制代码
const r = window.getSelection().getRangeAt(0)

我们可以看到"日期"两个字是数据A标签的,它的父级节点有div.post-meta和div.post-item。

如果我们直接把它的父级节点删掉为怎么样,我们把div.post-item这个节点删掉试试。

现在在控制台打印下之前的变量r,发现它的range指向了div.post-list,而它正是被删掉的div.post-item最近的父级节点。

总结

我们缓存range信息开发的时候一定要注意啦,不能完全信赖自己之前缓存值,不要简单的认为用一个变量保存之前的选区,等到后面想使用的时候随时都能用,这时一定要注意之前的选区有没有被删掉,小心掉坑里了。

相关推荐
Data analyse4569 分钟前
用户路径SQL按会话起止时间聚合的方法
大数据·服务器·前端·数据库·人工智能·sql·数据分析
独孤九剑打醒他12 分钟前
【原创开源·2.0 版】太阳能水闭环氢能源汽车:动态制氢、动能回收与副产物商业闭环
前端·嵌入式硬件·汽车·硬件工程·能源
小毛驴85015 分钟前
mvn help:effective-settings 与 mvn help:effective-pom
java·linux·前端
志尊宝22 分钟前
AI原生前端开发(001):Cursor编辑器深度使用从入门到精通
前端·编辑器·ai-native
ZoeLandia31 分钟前
TypeScript 07:工程化——import type、声明文件与 tsconfig
开发语言·前端·typescript
拖孩32 分钟前
# AI 帮我写的小程序,上线不到一个月流量主突然爆了
前端·后端·微信小程序
一木 之林1 小时前
LangChain 第6章 Agent 智能体核心:create_agent 统一入口与 ReAct 循环
前端·react.js·langchain
不可能片场1 小时前
Electron 发布进程被回收 用脱离进程组托住
前端·electron
kaixin_learn_qt_ing1 小时前
hexdump -C /path/to/binary | less 看十六进制内容
前端·css·less
java1234_小锋1 小时前
【技术专题】HTML5 网页技术 - HTML5 链接与图片
前端·html·html5