有没有一种非天真的方法来计算 DOM 偏移量的逻辑偏移量?



我已经通过将父元素中的一些文本放在<span>中突出显示了它,现在想要弄清楚选择了它的哪一部分。我已经检索了Selection对象,但它不包含直接有用的信息。我想获取相对于文本开头的偏移量,但它们相对于突出显示<span>s内的文本节点,并且与parent.textContent不对齐。

鉴于:

  • parent元素
    的引用 此元素只包含内联元素(特别是<span>s)和文本节点,但它们是任意嵌套的。
  • Selection.anchorNode/Selection.focusNode
    这是对文本节点的引用,该节点包含包含偏移位置的文本片段。
  • Selection.anchorOffset/Selection.focusOffset
    这是一个非负整数,其中0在第一个字符之前。

有没有比天真的"用累积计数探索树"技术更有效的方法,为了测量Selection焦点和锚点而假装<span>不存在?

我不知道它在性能方面是否更有效,你必须衡量一下。就代码行而言,Range API应该使事情变得相当容易。构造从父元素的开头到所选内容的开头的范围,然后计算其中包含的字符数。

毕竟,Selection主要是范围的集合。

最新更新