3

我在时间a得到光标位置。然后我得到时间 b 的光标位置。我想创建一个从时间 a 的光标位置到时间 b 的光标位置的范围。时间 a 和 b 是 ctr-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,但似乎应该有更简单的方法,因为我已经有了两个范围。

4

1 回答 1

1

编辑这实际上不会给你你正在寻找的东西......这真的很复杂。我最初对 commonAnscestorContainer.innerHTML 的建议会给你太多的回报(最接近你选择的父容器的所有 HTML)。

首先,您可能希望在用户按下 ctrl+c 时触发的 eventHandler 上触发此代码(此处讨论:如何使用 JavaScript 检测 Ctrl+V、Ctrl+C?)。

如果您只想选择文本,这很容易完成:

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

您无需在不同时间检查选择 - 您只需在用户点击 ctrl-c 时捕获它。

getSelection 并不意味着捕获选择的 HTML。您可以捕获文本和删除文本、移动到选择的开始/结束以及此处描述的许多其他内容,但您无法获取 HTML。

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

如果您确实需要这样做,可以在此处找到一些基于非标准的示例,说明如何获取范围之外的更多信息 -获取范围相对于其父容器的开始和结束偏移量

于 2013-05-19T17:54:04.537 回答