2012-01-02 36 views
1

我有一个contentEditable div元素。在可编辑区域在第一次按键创建一个容器< p使用以下逻辑>标签:防止Firefox向contentEditable div添加文本节点(Firefox bug?)

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标签有两个文本节点作为兄弟姐妹。 Google Chrome和Opera不会这样做。这个额外的文本节点会对我的撤消/重做系统造成问题。该撤销系统将插入符号位置保存为节点偏移量数组。 contentEditable div的内容使用innerHTML进行保存和恢复。但是,通过此方法恢复内容时,只会创建一个文本节点,其中Firefox以前有2个文本节点,导致出错。我想知道是否这种行为(创建额外的文本节点)是故意在Firefox中,或者如果它可能是一个错误。任何建议或建议非常感谢。

回答

0

似乎是故意的;它试图编辑您放入的<p>标记,并在其后基本生成HTML。