Я в курсе этого вопроса в IE. У меня есть элемент с атрибутом contenteditable, установленным на "true". Внутри есть различные элементы, некоторые из которых не могут быть изменены, текст обернут в промежутки, используя имя класса CSS «uneditable».
Используя обработчик для события «keydown», проверяется узел привязки выбора. Если 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 редактировать мои не редактируемые элементы?
Любая помощь будет принята с благодарностью.