0

我对 IE 中的这个问题束手无策。我有一个 contenteditable 属性设置为“true”的元素。里面有各种元素,其中一些无法更改,使用 CSS 类名称“不可编辑”的跨度包装的文本。

使用“keydown”事件的处理程序,检查选择的anchorNode。如果anchorNode 是不可编辑元素的文本节点,则更改范围并设置为在不可编辑元素节点之后开始。这在所有浏览器中都能完美运行,除了被称为 IE 的可恶。

举个例子:

Lorem ipsum dolor sit <span class="uneditable">amet</span>, 
consectetur adipisicing elit

如果插入符号位于不可编辑元素的末尾,则按下的任何字符键都应添加到下一个文本节点的开头。但在 IE 中,文本被添加到不可编辑元素的末尾。

这是处理程序:

$("#myeditor").keydown(function(ev) 
{ 
    var sel = rangy.getSelection(); 
    var range = sel.getRangeAt(0); 
    if (sel.anchorNode.nodeType == 3) 
    { 
            if ($(sel.anchorNode.parentNode).is(".uneditable")) 
            { 
                    range.setStartAfter(sel.anchorNode.parentNode); 
                    rangy.getSelection().setSingleRange(range); 
            } 
    } 
});

即使我选择下一个兄弟并使用 range.setStart(nextSibling, 0),IE 仍然会在不可编辑元素内添加新文本。如何防止 IE 编辑我不可编辑的元素?

任何帮助将不胜感激。

4

1 回答 1

1

问题是 IE 根本不允许您将插入符号放在该位置,而是将其“更正”在前一个字符的末尾。WebKit 实际上做同样的事情。有关示例,请参见http://jsfiddle.net/MZuFb/1/ 。

我能想到的唯一解决方法是插入一个临时字符并选择它以便它被覆盖:http: //jsfiddle.net/timdown/MZuFb/2/

于 2011-08-31T11:17:50.950 回答