概述
我试图突出显示一个dom范围然后取消它。假设范围可以跨越多个元素,甚至是块元素,则在具有突出显示类的跨度中包装范围可能会破坏页面的外观。更糟糕的是,我还没有发现一种彻底改变操作的方法。 range.extractContents()
是我所知道的唯一可以修复html以确保标记正确关闭的方法,但它通过在" span"周围插入填充节点来改变文档。删除" span"。
我解决这个问题的想法是使用另一种方法。我可以用包含我的span的新html替换最常见祖先的html。然后保存原始的html并恢复它以完成" unhighlight"。
我认为这可以解决撤销能力问题,但我不知道如何以range.extractContents()
修复它来修复html。
是否有一种方法可以使用html和"修复它"适合作为innerHtml
答案 0 :(得分:1)
最少侵入性方法将获取范围的文本节点,在每个范围上计算.getBoxQuads()
,然后在这些坐标上插入绝对定位的覆盖CSS filters。< / p>
答案 1 :(得分:0)
分配给innerHTML
隐含地涉及使用HTML解析器,因此分配的代码中的语法错误会自动修复 - 只需分配给innerHTML
并将其读回以获取固定代码。您也可以使用DOMParser。
请注意,此类固定代码可能不一定符合您在每种特定情况下的预期。