不推荐使用Selection.addRange() - 如何解决错误

时间:2017-07-14 13:51:04

标签: javascript jquery twitter-bootstrap range

寻求网络带我到Selection.addRange() is deprecated and will be removed from Chrome

但这有点广泛。我得到这个错误,因为我已经在我的项目中包含了一些引导程序。现在对我来说" Range"表示 [从A到Z] [从START到END]

阅读上面发布的帖子告诉我解决问题的方法是致电removeAllRanges(); befor addRange(..);但是阅读删除所有范围让我建议几个范围或值可以添加。

我试图在其间添加removeAllRanges();并且它给我带来了更多错误,因为如果我添加一个范围(开始),我必须添加第二个(结束)。

实际上它不是一个范围,它更多是在addRange中设置的参数。

以下是一些导致问题的引导程序生成文件中的代码

(function() {
    var iframe = document.createElement("iframe");
    body.appendChild(iframe);

    var iframeDoc = dom.getIframeDocument(iframe);
    iframeDoc.open();
    iframeDoc.write("<html><head></head><body>12</body></html>");
    iframeDoc.close();

    var sel = dom.getIframeWindow(iframe).getSelection();
    var docEl = iframeDoc.documentElement;
    var iframeBody = docEl.lastChild, textNode = iframeBody.firstChild;

    // Test whether the native selection will allow a collapsed selection within a non-editable element
    var r1 = iframeDoc.createRange();
    r1.setStart(textNode, 1);
    r1.collapse(true);
    sel.addRange(r1);
    collapsedNonEditableSelectionsSupported = (sel.rangeCount == 1);
    sel.removeAllRanges();

    // Test whether the native selection is capable of supporting multiple ranges
    var r2 = r1.cloneRange();
    r1.setStart(textNode, 0);
    r2.setEnd(textNode, 2);
    sel.addRange(r1);
    sel.addRange(r2);

    selectionSupportsMultipleRanges = (sel.rangeCount == 2);

    // Clean up
    r1.detach();
    r2.detach();

    body.removeChild(iframe);
})();

这里的问题部分是

sel.removeAllRanges();

var r2 = r1.cloneRange();
r1.setStart(textNode, 0);
r2.setEnd(textNode, 2);
sel.addRange(r1);
sel.addRange(r2);      //<<============ HERE

当然我需要第二个范围才能让

selectionSupportsMultipleRanges = (sel.rangeCount == 2);

工作!

我该如何解决这个问题?

有没有办法添加只有一个启动参数的真实范围内的内容?

1 个答案:

答案 0 :(得分:0)

如果您想要一个范围(从开始到结束),可以执行以下操作:

let range = document.createRange()
range.setStart(r1);
range.setEnd(r2);
let range2 ....


let sel = window.getSelection()
selection.removeAllRanges();
selection.addRange(range);
selection.addRange(range2);
....

我会在这里看

https://developer.mozilla.org/en-US/docs/Web/API/Range https://developer.mozilla.org/en-US/docs/Web/API/Selection/addRange

有关范围的更多信息。

希望这可以回答您的问题(即使是很晚)。