我知道这是一年前的文章,但这篇文章是有关查找 Caret 位置的许多问题的最佳搜索结果,我发现这很有用。
在内容可编辑的 div 中将元素从一个位置拖放到另一个位置后,我试图使用上面 Tim 的优秀脚本来找到新的光标位置。它在FF和IE中完美运行,但在Chrome中,拖动动作突出显示了拖动开始和结束之间的所有内容,导致返回caretOffset
的太大或太小(按所选区域的长度)。
我在第一个 if 语句中添加了几行以检查是否选择了文本并相应地调整结果。新声明如下。如果在此处添加此内容不合适,请原谅我,因为这不是 OP 想要做的事情,但正如我所说,对与 Caret 位置相关的信息进行的几次搜索使我找到了这篇文章,因此(希望)可能会帮助其他人.
Tim 的第一个 if 语句添加了行 (*):
if (typeof window.getSelection != "undefined") {
var range = window.getSelection().getRangeAt(0);
var selected = range.toString().length; // *
var preCaretRange = range.cloneRange();
preCaretRange.selectNodeContents(element);
preCaretRange.setEnd(range.endContainer, range.endOffset);
caretOffset = preCaretRange.toString().length - selected; // *
}