Javascript,如何重新创建选择/范围?

标签 javascript dom

在 javascript 中:我需要抓取一个网页选择,然后稍后重新创建准确的选择。

我这样做如下。这在向前创建原始选择时起作用,但在通过向后/向上移动鼠标进行原始选择时不起作用。它不会抛出错误,但未选择任何内容。在这种情况下,我需要切换 setStart() 和 setEnd() 的参数。

我怎么知道我需要这样做?原始选择是向后的还是一个节点在另一个节点之后/之前?

编辑:我想使用纯 js,没有额外的库

编辑 2:我不需要它在旧 IE 中工作。 IE9+ 没问题。

// **** user makes selection

// **** get selection and range ****

var selection = window.getSelection(); 

var startNode = selection.anchorNode;
var endNode = selection.focusNode;

var startOffset = selection.anchorOffset;
var endOffset = selection.focusOffset;

// **** do stuff where selection is lost *****

// **** recreate selection as it was ****

var range = document.createRange();

range.setStart(startNode, startOffset);
range.setEnd(endNode, endOffset);

selection.removeAllRanges(); 
selection.addRange(range);  // works except when original selection was backwards

最佳答案

使用 rangy.js您可以轻松保存和恢复选择

Live Demo

var savedSel = rangy.saveSelection();

//Selection is lost

rangy.restoreSelection(savedSel);

source

关于Javascript,如何重新创建选择/范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21587388/

相关文章:

javascript - 在 phantomjs 中访问 iframe 的 contentDocument

javascript - 如何在不等待用户使用 JavaScript 键入字符的情况下检查大写锁定是否打开?

javascript - 使用 Javascript 从 Web View 切换到应用程序 View

javascript - 我在使用 xampp 时无法在 chrome 上调用 ajax

javascript - 等待两个异步函数完成,然后在 Node.js 中继续

JavaScript 在每个父 div 之后插入 href 值

javascript - 谷歌翻译覆盖选择更改事件

javascript - 使用 jquery 将 id 分配给现有 div

javascript - jquery 到 Vanilla js; html标签的每个循环

javascript - <head> 元素在 DOM 中是否始终可用,即使在 HTML 标记中不存在?