我知道如何确定哪些DOM节点与绝对位置相交。但是假设这是一个文本节点。如何确定该位置所对应的文本节点内的偏移量?我想从已知位置构建DOMRange到该位置。
我知道如何确定哪些DOM节点与绝对位置相交。但是假设这是一个文本节点。如何确定该位置所对应的文本节点内的偏移量?我想从已知位置构建DOMRange到该位置。
第一步是找到所有与位置相交的元素
。您应该使用Element.getBoundingClientRect
方法来完成此操作。然后,您可以轻松获取那些元素
中包含的所有文本
节点。难点在于确定这些文本
节点中哪些文本在这些边界内。您可以从Element.getClientRects
开始,以获取该元素
内的文本行。这里有一个很好的例子。
然后,您需要构造一个范围
对象,并适当更改startOffset
和endOffset
。您也可以在范围
对象上使用getClientRects
方法。
getClientRects()
是关键。我已经有了一个初始实现,它在有效的DOMRanges空间上执行二分搜索,递归下降节点树,直到遇到叶子节点或TEXT/comment/CDATA节点为止。等我有时间整理代码后会发布出来。 - Andy Matuschak