我知道这已经一岁了,但是这篇文章是关于找到Caret职位的许多问题的最佳搜索结果,我发现这很有用。
在内容可编辑div中将元素从一个位置拖放到另一个位置后,我试图使用上述Tim的出色脚本来查找新的光标位置。它在FF和IE中完美运行,但是在Chrome中,拖动动作会突出显示拖动开始和结束之间的所有内容,从而导致返回caretOffset的内容太大或太小(按所选区域的长度计算)。
我在第一条if语句中添加了几行,以检查是否已选择文本并相应地调整结果。新的声明如下。原谅我在此处添加此内容是否不合适,因为这不是OP想要做的,但是正如我所说,对与Caret职位相关的信息的多次搜索将我带到了这篇文章,因此(希望)有可能帮助其他人。
蒂姆的第一条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);
  if(selected){ 
    caretOffset = preCaretRange.toString().length - selected; 
  } else { 
    caretOffset = preCaretRange.toString().length; 
  } 
}