1

在我的项目中,我使用的是 "contenteditable" div。我正在尝试通过使用它来创建自动完成功能div。每当我输入任何单词时,一些建议应该在不同的div. 当我按下 时ENTER,所选建议应替换为 "contenteditable" 中输入的文本div。然后,当我按 时SPACE,应该可以看到更多建议。

如需更清晰的解释,请参阅this fiddle

在小提琴中,键入一些字母,然后按ENTERthenSPACE

每当我按SPACE时,都会显示一个警告框(用于测试)。这告诉 "contenteditable" 中插入符号的当前位置div

但是当我按ENTER然后SPACE,插入符号的当前位置是错误的,即0

据我了解,如果我不使用该placeCaretAtEnd()功能,那么我将正确获得插入符号的位置。但就我而言,我想同时使用(getCaretPosition()placeCaretAtEnd())。

我在 Firefox 中检查这个。(在 Chrome 中,它似乎工作正常

我需要一个适用于 IE8+、Chrome 和 Firefox 的解决方案。请帮忙。

4

2 回答 2

2

您需要一种更复杂的方法来获取与可编辑 div 中的所有文本一起使用的插入符号位置。您可以使用此问题中的代码,尽管我不太确定您要实现的目标。您可能会遇到问题,因为代码没有考虑<br>和块元素隐含的 lin 中断。

演示:http: //jsfiddle.net/BN5N6/12/

于 2013-04-27T15:02:25.993 回答
1

对不起,我不能给你一个完整的答案。我会将其作为评论发布,但我没有评论权。玩过你的小提琴后,我注意到在 Firefox(我测试过的唯一浏览器)中按下 Enter 后,“结果”div 将有一个额外的子文本节点。这不是您的 placeCaretAtEnd 函数的结果。当您按 Enter 键时,它似乎是 Firefox 为您做的事情。

看起来您在控制台中获得的 0 是浏览器为您创建的新文本节点中插入符号的位置。如果在按回车后单击原始文本节点并按空格键,控制台将为您提供正确的插入符号位置(再次,相对于光标所在的文本节点)。

于 2013-04-26T16:08:44.870 回答