分享缓存的光标选区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信息开发的时候一定要注意啦,不能完全信赖自己之前缓存值,不要简单的认为用一个变量保存之前的选区,等到后面想使用的时候随时都能用,这时一定要注意之前的选区有没有被删掉,小心掉坑里了。

相关推荐
馒头不想说话29 分钟前
实体店老板的24小时AI运营员工,写、剪、发全自动,省下一整个团队工资
前端
椒哥3 小时前
一天被问几十次"允许",我统计了 517 次,然后写了个插件
前端·javascript·github
风骏时光牛马3 小时前
生成一个AI稳定性治理及疑难问题分析标题,只需要一个标题,不需要其他的任何文本。
前端
莫西干式秃头3 小时前
用 AI + threejs 写了个浏览器里的 3D 动作游戏《武来》:砍怪、放技能、开 SU7
前端·人工智能·three.js
kyriewen3 小时前
我测了 6 种防请求竞态的写法:只有 1 种真能打
前端·javascript·程序员
孟健3 小时前
用 WorkBuddy 做个人名片网页,挂上开源设计技能后效果完全不同了
前端·人工智能·ai编程
IT_陈寒3 小时前
SpringBoot自动配置的坑,这次终于爬出来了
前端·人工智能·后端
LuHang4 小时前
从天地图切换到高德地图:一次真实的底图迁移实战
前端·vue.js·cesium
用户360055579004 小时前
Kestrel_VLLM - 27 · 寄存器常驻与融合发射:两次「少发一次」
前端
前端小万4 小时前
用"道法术器"重构你和 AI 的协作方式
前端·人工智能·程序员