2

我有一组范围,从以下tokensToRanges函数创建:

将标记转换为选择范围

现在我想遍历每个范围,并对它们应用一个动作。但是我收到一个错误:

未捕获的错误:范围错误:DOM 突变后范围不再有效 ([WrappedRange("foobar":6)])

现在我明白了为什么会出现错误,但我想知道如何遍历一组范围并操纵每个范围?

4

2 回答 2

3

这是一个棘手的问题,我已经遇到过好几次了。您的选择基本上是:

  1. 将范围列表转换为范围边界列表。对于每对边界,创建一个范围,进行 DOM 操作并调整任何需要调整的剩余范围边界。
  2. 重构生成范围列表的代码,一次只给你一个范围。
于 2012-11-19T09:40:33.430 回答
1

我在使用文本荧光笔时遇到了这个问题。当您修改要搜索的范围的内容时,似乎会发生这种情况。在我的例子中,我只是使用隐藏的跨度元素来封装我的文本,而不是尝试自己解析范围,然后隐藏跨度的类来操作其内容,然后解开隐藏的跨度。

它可能不适用于您的情况,但对我来说,解决方案是简单地将范围扩大到包含我正在修改的元素的 div 元素。

于 2013-01-30T17:50:52.097 回答