【问题标题】:Why use removeAllRAnges() at the start of a selection?为什么在选择开始时使用 removeAllRANges()?
【发布时间】:2013-05-31 18:17:23
【问题描述】:

我有这段代码工作,我只是想了解为什么我需要在开始时使用removeAllRangessel 是否在初始化时自动包含范围?

function setCaret(boolean_position) {
   var range = document.createRange();
   var sel = window.getSelection();
   range.selectNodeContents($('#board_code')[0]);
   range.collapse(boolean_position);
   sel.removeAllRanges();
   sel.addRange(range);//setting the caret position
} 

【问题讨论】:

    标签: javascript dom range selection contenteditable


    【解决方案1】:

    是的,从window.getSelection() 检索到的选择不是像document.createRange() 创建的范围那样的空实例。请注意这些方法名称的不同 - 一个创建新实例,第二个获取实例。

    原因很简单——你可以有多个范围实例,每个包含不同的位置。但是每个文档只有一个选择。

    因此,在添加范围之前,通常您必须删除当前选择的旧范围。当然,除非您想扩展当前选择。

    更新: 正如 Tim 正确指出的那样,只有 Firefox 支持多个选择范围。这意味着只有在 Firefox 上,您才能一次选择多个 DOM - 例如。您可以选择表格的列或使用 CTRL 键添加更多选择。

    因此,只有 Firefox 要求您在添加下一个之前执行removeAllRanges()。其他浏览器会自动删除旧范围。

    【讨论】:

    • 我相信你知道,可能有多个选择范围,但仅限于 Mozilla,在其他浏览器中调用addRange(range) 将取消选择先前选择的范围并选择range,这意味着removeAllRanges() 在这些浏览器中通常是多余的。
    • 呃...我专注于一般方面,忘了提及:)谢谢。
    • 实际上,我错了:当调用addRange() 并且已经选择了一个范围时,似乎最新版本的Chrome 什么都不做,这是对旧版本的更改,所以removeAllRanges() 是必要的.
    • @TimDown 谢谢你的专业知识是这个范围和选择支持我在以前的问题中阅读了很多你的答案和提示
    猜你喜欢
    • 2021-10-05
    • 2014-02-12
    • 2020-05-09
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    相关资源
    最近更新 更多