我已经通过将父元素中的一些文本放在<span>
中突出显示了它,现在想要弄清楚选择了它的哪一部分。我已经检索了Selection
对象,但它不包含直接有用的信息。我想获取相对于文本开头的偏移量,但它们相对于突出显示<span>
s内的文本节点,并且与parent.textContent
不对齐。
鉴于:
- 对
parent
元素
的引用 此元素只包含内联元素(特别是<span>
s)和文本节点,但它们是任意嵌套的。 Selection.anchorNode
/Selection.focusNode
这是对文本节点的引用,该节点包含包含偏移位置的文本片段。Selection.anchorOffset
/Selection.focusOffset
这是一个非负整数,其中0
在第一个字符之前。
有没有比天真的"用累积计数探索树"技术更有效的方法,为了测量Selection
焦点和锚点而假装<span>
不存在?
我不知道它在性能方面是否更有效,你必须衡量一下。就代码行而言,Range API应该使事情变得相当容易。构造从父元素的开头到所选内容的开头的范围,然后计算其中包含的字符数。
毕竟,Selection
主要是范围的集合。