Мне нужно реализовать выделение для чисел (в будущем im добавить более сложные правила) в contenteditable div. Проблема заключается в том, когда im вставляют новый контент с заменой javascript, изменениями DOM и contenteditable div теряют фокус. Мне нужно сосредоточиться на div с кареткой на текущей позиции, поэтому пользователи могут просто вводить без каких-либо проблем, а моя функция - простое выделение номеров. Я пытаюсь понять, что Rangy библиотека - лучшее решение. У меня есть следующий код:
function formatText() {
var savedSel = rangy.saveSelection();
el = document.getElementById('pad');
el.innerHTML = el.innerHTML.replace(/(<([^>]+)>)/ig,"");
el.innerHTML = el.innerHTML.replace(/([0-9])/ig,"<font color='red'>$1</font>");
rangy.restoreSelection(savedSel);
}
<div contenteditable="true" id="pad" onkeyup="formatText();"></div>
Проблема заключается в том, что после завершения функции завершения работы возвращается в div, но карет всегда указывает на начало div, и я могу печатать где угодно, execept div begin. Кроме того, типы console.log следуют Rangy warning: Module SaveRestore: Marker element has been removed. Cannot restore selection.
Пожалуйста, помогите мне реализовать этот функционал. Im открыт для другого решения, а не только для библиотеки rangy. Спасибо!
http://jsfiddle.net/2rTA5/ Это jsfiddle, но он не работает должным образом (ничего не происходит, когда я вводил числа в свой div), не знаю, может быть, это мне (первый пост-код через jsfiddle) или ресурс не поддерживает контент. UPD * Im прочитал аналогичные проблемы в stackoverflow, но решения не подходят для моего случая: (