如何在给定鼠标(或文档)位置的DOM节点内获取DOMRange样式的偏移量?

4

我知道如何确定哪些DOM节点与绝对位置相交。但是假设这是一个文本节点。如何确定该位置所对应的文本节点内的偏移量?我想从已知位置构建DOMRange到该位置。


我非常确定这是不可能的,至少跨浏览器兼容性方面是如此,但如果有其它情况,我很乐意听取。 - Irongaze.com
1个回答

1

第一步是找到所有与位置相交的元素。您应该使用Element.getBoundingClientRect方法来完成此操作。然后,您可以轻松获取那些元素中包含的所有文本节点。难点在于确定这些文本节点中哪些文本在这些边界内。您可以从Element.getClientRects开始,以获取该元素内的文本行。这里有一个很好的例子

然后,您需要构造一个范围对象,并适当更改startOffsetendOffset。您也可以在范围对象上使用getClientRects方法。


谢谢:getClientRects()是关键。我已经有了一个初始实现,它在有效的DOMRanges空间上执行二分搜索,递归下降节点树,直到遇到叶子节点或TEXT/comment/CDATA节点为止。等我有时间整理代码后会发布出来。 - Andy Matuschak
我已经在https://github.com/andymatuschak/DOMNodeAndChildOffsetContainingViewportLocation上发布了我的实现。 - Andy Matuschak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接