如何在删除可编辑内容的div中的元素时防止插入符号错位



当用户在评论框中键入时,我的应用程序包括一个预编功能。以类似于Facebook和google+的方式,它将对用户进行查找,并将其建议为动态标签。

当用户选择所提供的标签之一时,它会作为一个元素输入到输入区域中。

我决定使用一个可编辑的div,但是遇到了一些问题。

事实证明,当插入的元素设置为contenteditable false时,firefox不会删除这些元素,而其他主流浏览器都会删除。

为了解决这个问题,我将插入的"user"标记设置为contenteditable=true,并编写了一个快速的jquery解决方案来解决这个问题。

除了一个主要问题之外,它还能完美地工作。如果区域中有多个标记,并且第一个标记没有任何文本,那么当用户删除最后一个标记时(假设使用从右到左的退格键删除),插入符号在最后一次删除后的位置会不正确。

再次出现打字,然后将位置恢复正常。

此问题仅发生在Firefox中

以下是显示问题的jsFiddle:

http://jsfiddle.net/gordyr/PESky/

将光标放在最后一个标记的末尾,然后按住退格键,直到删除所有元素。您将看到光标/插入符号向上移动并离开位置。

这很可能实际上是firefox本身的一个错误,但我正在寻找某种变通方法,因为如果没有javascript自动删除元素,就根本不会删除。

非常感谢

FF似乎留下了一些污垢,但您可以通过添加来清理

if (!$.trim(el.text())) {
el.empty();
}

这将检查contenteditable的innerText是否只包含空格或换行符。如果是,就清空它。在我的测试中似乎有效:http://jsfiddle.net/cBZ7k/

附带说明:您可能应该使用keydown而不是keypress来支持webkit。此外,e.which足以获得keyCode,jQuery为您规范化此事件属性。

最新更新