我在时间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,但似乎应该有一个更简单的方法,因为我已经有两个范围。
答案 0 :(得分:1)
编辑这实际上不会给你你想要的东西......这真的很复杂。我对commonAnscestorContainer.innerHTML的初步建议会给你太多回报(所有最接近的父容器的HTML都是你的选择)。
首先,您可能希望在用户按下ctrl + c时触发的eventHandler上触发此代码(此处讨论:How to detect Ctrl+V, Ctrl+C using JavaScript?)。
如果您只想选择文字,那很容易做到:
range = window.getSelection().toString();
您不需要在不同时间检查选择 - 您只需要在用户点击ctrl-c时捕获它。
getSelection不用于捕获选择的HTML。你可以捕捉文字和删除文本,移动到选择的开头/结尾以及描述here的一堆其他内容,但是您无法获取HTML。
问题的一大部分是这不是任何标准规范的一部分(见this link)。它在浏览器中不一致或在IE7 / 8中受支持的另一个原因。
如果你真的需要这样做,可以在这里找到一些非标准的如何从范围选择中获取更多信息的例子 - Get a range's start and end offset's relative to its parent container