Contenteditable Div - 根据innerHTML位置的光标位置

时间:2015-03-25 13:43:08

标签: javascript contenteditable cursor-position

我已经完成了我的研究并在StackOverflow上遇到了这些问题,其中人们问同样的问题,但问题是他们想要从x和y坐标或左边的列获得位置。我想知道光标相对于div的innerHTML的位置。

例如:

innerHTML = "This is the innerHTML of the <b>div</b> and bla bla bla..."
                                                        ^
                                                  Cursor is here

所以我想要这个案子的结果是44.怎么做?

1 个答案:

答案 0 :(得分:4)

var target = document.createTextNode("\u0001");
document.getSelection().getRangeAt(0).insertNode(target);
var position = contentEditableDiv.innerHTML.indexOf("\u0001");
target.parentNode.removeChild(target);

这会暂时插入包含不可打印字符(\u0001)的虚拟文本节点,然后在div的{​​{1}}中找到该字符的索引。

在大多数情况下,这会使DOM和当前选择保持不变,可能会产生一个小的副作用:如果光标位于单个文本节点的文本中间,则该节点将被分解为两个连续的文本节点。通常这应该是无害的,但请在特定应用的背景下牢记它。

UPDATE:结果证明您可以使用Node.normalize()合并连续的文本节点。