📜  删除了 Selection.addRange() 合并现有 Range 和指定 Range 的行为. - Javascript(1)

📅  最后修改于: 2023-12-03 15:07:14.459000             🧑  作者: Mango

删除了 Selection.addRange() 合并现有 Range 和指定 Range 的行为. - Javascript

从Chrome 92 开始,Selection 接口的 addRange() 方法不再支持合并现有 Range 和指定 Range 的行为。这意味着,调用 addRange() 方法将替换先前添加的 Range,而不是将其合并。

背景

addRange() 方法用于将一个 Range 对象添加到选定内容的范围中。如果前一个 Range 范围仍然存在,则调用 addRange() 方法时,旧的范围将与新的 Range 范围合并。在这种情况下,新范围被添加到最后一个范围的结尾处。

在Chrome 92之前,addRange() 方法合并了新的 Range 范围和现有范围。在Chrome 92中,这种行为已经被删除。

影响

这项更改可能会影响那些依赖于 addRange() 方法合并 Range 范围的应用程序。由于该行为已被删除,这些应用程序需要更新其代码以处理 addRange() 方法的新行为。

解决方案

如果您的应用程序依赖于 addRange() 方法合并 Range 范围,您需要更新您的代码以处理新的行为。如果您希望将新的 Range 范围添加到选定内容的末尾而不是替换现有范围,请考虑使用以下代码:

const selection = window.getSelection();
const range = document.createRange();
range.selectNode(document.getElementById("myElement"));
selection.extend(range.endContainer, range.endOffset);
selection.addRange(range);

这段代码使用 extend() 方法将选定内容的结束位置扩展到新加入的 Range 所在位置。这允许新的 Range 范围被添加到选定内容末尾。

结论

从Chrome 92开始,Selection 接口的 addRange() 方法不再支持将新的 Range 范围与现有范围合并的行为。这将影响那些依赖于 addRange() 方法合并 Range 范围的应用程序。为了解决这个问题,开发者需要更新他们的代码以适应新的行为。