javascript - Selection.addRange() 已弃用 - 如何解决错误

标签 javascript jquery twitter-bootstrap range

搜索网络让我找到了Selection.addRange() is deprecated and will be removed from Chrome

但这有点太宽泛了。我收到此错误是因为我在我的项目中包含了一些 Bootstrap 。现在对我来说“范围”意味着[从A到Z][从开始到结束]

阅读上面发布的帖子告诉我解决问题的技巧是在 addRange(..); 之前调用 removeAllRanges(); 但阅读remove所有范围让我建议可以添加几个范围或值。

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

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

这是导致问题的一些 Bootstrap 生成文件中的代码

(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);

工作!

我该如何解决这个问题?

有没有办法添加实际范围而不仅仅是开始参数?

最佳答案

如果你想要一个范围(从开始到结束),你可以这样做:

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

有关范围的更多信息。

希望这能回答您的问题(即使已经晚了)。

关于javascript - Selection.addRange() 已弃用 - 如何解决错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45104718/

相关文章:

javascript - 内联编辑面临困难

jquery - 将 img src 设置为浏览器已加载的图像 - 导致 Safari 中重新加载图像

javascript - 清除选择时选择的选择插件 'change' 事件

html - 为 Bootstrap 4 创建自定义网格数 (24)

javascript - 使用 FileAPI 下载生成的大数据文件

javascript - 将 knockout 绑定(bind)应用于模板并获取字符串形式的结果

javascript try catch 与 json 解析

javascript - 背景显示输入字符的进度

css - 我可以明确定义 Bootstrap 应切换到响应式移动版本的最小像素宽度吗?

jquery - 如何将 bootstrap 3 添加到基于 Angular2 webpack 的项目中