Javascript Can';将插入符号值设置到某个位置后,无法获取插入符号位置值
在我的项目中,我使用的是“contenteditable”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
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的工作版本吗?这样我就可以再试一次了。如果你有时间。