Javascript Can';将插入符号值设置到某个位置后,无法获取插入符号位置值

Javascript Can';将插入符号值设置到某个位置后,无法获取插入符号位置值,javascript,jquery,html,firefox,cross-browser,Javascript,Jquery,Html,Firefox,Cross Browser,在我的项目中,我使用的是“contenteditable”div。我正试图使用这个div创建一个自动完成功能。每当我键入任何单词时,都会在不同的div中看到一些建议。当我按下[code>ENTER时,所选建议应替换为“contenteditable”div中输入的文本。然后,当我按空格键时,应该可以看到进一步的建议 有关更清楚的解释,请参见此 在小提琴中,键入一些字母,然后按ENTER然后按SPACE 每当我按下空格键时,就会显示一个警报框(用于测试)。这说明插入符号在“contentedita

在我的项目中,我使用的是“contenteditable”
div
。我正试图使用这个
div
创建一个自动完成功能。每当我键入任何单词时,都会在不同的
div
中看到一些建议。当我按下[code>ENTER时,所选建议应替换为“contenteditable”
div
中输入的文本。然后,当我按空格键时,应该可以看到进一步的建议

有关更清楚的解释,请参见此

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

每当我按下空格键时,就会显示一个警报框(用于测试)。这说明插入符号在“contenteditable”
div
中的当前位置

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

据我所知,如果我不使用
placeCaretAtEnd()
函数,那么我得到的插入符号位置是正确的。但在我的例子中,我想同时使用(和)

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


我需要一个在IE8+、Chrome和Firefox中工作的解决方案。请帮忙。

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


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

您需要一种更复杂的方法来获取插入符号位置,这种方法可以处理可编辑div中的所有文本。您可以使用来自的代码,尽管我不太确定您想要实现什么。代码没有考虑

和块元素所隐含的lin中断,这可能会导致出现问题


演示:

+1是的,似乎你是对的:)。有没有解决这个问题的建议?在Firefox上遇到了同样的问题,我花了很长时间才找到问题所在。似乎是Firefox的一个bug。。你终于找到了一个简单的解决办法吗?@jiyinyiyong是的,检查下面的答案。它完美地解决了我的问题很高兴发现它有效。但是,当我将代码复制为
placeCaretAtEnd2()
函数并替换旧版本时,它仍然需要在
0
上获得一个caretPosition。我试图
console.log
我在
placeCareTPosition
之后立即通过
getcaretPosition
获得的结果,发现它是
0
而不是整数
>0
。无论如何,谢谢你。你能告诉我Firefox的工作版本吗?这样我就可以再试一次了。如果你有时间。