我对 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 编辑我不可编辑的元素?
任何帮助将不胜感激。