创建从时间a到时间b的光标位置范围

javascript: create range from cursor position at time a to cursor position at time b

本文关键字:时间 光标 位置 范围 创建      更新时间:2023-09-26

我得到了时间a的光标位置。然后我得到了时间b的光标位置。我想创建一个从时间a到时间b的光标位置的范围。时间a和b是ctrl -v(粘贴)的开始和结束。

我得到的光标位置是这样的——或者更确切地说是光标位置的范围。

sel = window.getSelection();
range_time_a = sel.getRangeAt(0).collapse(true);

但是,我如何使用range_time_a和range_time_b来创建一个新的范围,在range_time_a开始,在range_time_b结束?

我已经见过代码来获取带有光标的元素并在该元素中获取偏移量。我可以使用setStart()和setEnd,但似乎应该有一个更简单的方法,因为我已经有两个范围。

EDIT这实际上不会给你你想要的…这真的很复杂。我最初的建议commonAnscestorContainer。innerHTML会返回给你太多(最接近你选择的父容器的所有HTML)。

首先,您可能想要在用户按下ctrl+c时触发的eventHandler上触发这段代码(这里讨论:如何使用JavaScript检测ctrl+ V, ctrl+c ?)

如果你只想让文本被选中,这很容易做到:

range = window.getSelection().toString();

您不需要在不同的时间检查选择—您只需要在用户按ctrl-c时捕获它。

getSelection不是用来捕获选择的HTML的。您可以捕获文本&删除文本,移动到选区的开始/结束以及这里描述的一堆其他事情,但你不能抓取HTML。

问题的很大一部分是这不是任何标准规范的一部分(参见此链接)。另一个原因是它在浏览器之间不一致,或者在IE7/8中不支持。

如果你真的需要这样做,可以在这里找到一些非标准的例子,关于如何在范围选择之外获得更多信息-获取范围's的开始和结束偏移's相对于其父容器