将插入符号值设置到某个位置后无法获得插入位置值

时间:2013-04-26 13:13:22

标签: javascript jquery html firefox cross-browser

在我的项目中,我使用的是“满足”div。我正在尝试使用此div创建自动填充功能。每当我输入任何单词时,一些建议应该在不同的div中可见。当我按ENTER时,所选的建议应替换为“contenteditable”div中输入的文字。然后,当我按SPACE时,应该可以看到进一步的建议。

要获得更清晰的解释,请参阅 fiddle

在小提琴中输入一些字母然后按ENTER然后按SPACE

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

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

据我了解,如果我不使用placeCaretAtEnd()功能,那么我正确地获得了插入位置。但在我的情况下,我想同时使用(getCaretPosition()placeCaretAtEnd())。

我在Firefox中查看此内容。 (在Chrome中,它似乎正常运行

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

相关问题