防止Firefox将文本节点添加到contentEditable div(Firefox bug?)

时间:2012-01-02 05:02:29

标签: javascript firefox html contenteditable cursor-position

我有一个contentEditable div元素。在可编辑区域的第一个按键上,我创建了一个容器< p>使用以下逻辑标记:

var c = (32 == key ? '\u00A0' : String.fromCharCode(key));
var e = document.createElement('p');
var sel, rng;
e.appendChild(document.createTextNode(c));
this.editDocument.appendChild(e);
sel = window.getSelection();
rng = document.createRange();
rng.selectNodeContents(e);
rng.collapse(false);
sel.removeAllRanges();
sel.addRange(rng);

我遇到的问题是下一个按键事件Firefox创建另一个文本节点作为新角色的容器以及任何后续字符。这意味着我的p标签有2个文本节点作为兄弟节点。谷歌Chrome和Opera不会这样做。这个额外的文本节点会在我的undo / redo系统中产生问题。此撤消系统将插入符号位置保存为节点偏移数组。使用innerHTML保存和恢复contentEditable div的内容。但是,当通过此方法恢复内容时,只创建一个文本节点,其中Firefox以前有2个,导致错误。我想知道这种行为(创建额外的文本节点)是否是故意的,或者它可能是一个错误。任何建议或建议非常感谢。

1 个答案:

答案 0 :(得分:0)

似乎是故意的;它试图编辑你输入的<p>标签,之后基本上生成HTML。