Я увеличиваю текст, пока он написан, например, например. подсветка синтаксиса через промежутки вокруг kewords, в contentediatable области.
У меня есть общая проблема, когда курсор прыгает к началу состязания. Я попробовал решение Нико Бернса на Установить позицию курсора на contentEditable , оно работало в примере, но не для моего кода, возможно, потому что я меняю DOM внутри самого contenteditable.
полный код по адресу: http://pastie.org/2060277
output.addEventListener('keyup',augmentInput,false);
output.addEventListener('keydown',saveCursorPos,false);
output.addEventListener('mousedown',saveCursorPos,false);
output.addEventListener('keyup',restoreCursorPos,false);
function saveCursorPos(e){
//var selection = window.getSelection();
savedRange = window.getSelection().getRangeAt(0);
console.log("save "+e.type,savedRange);
}
function restoreCursorPos(e){
document.getElementById("output").focus();
if (savedRange != null) {
var s = window.getSelection();
if (s.rangeCount > 0){
s.removeAllRanges();
}
s.addRange(savedRange);
console.log("range !=0 "+e.type, savedRange);
}
else {
window.getSelection().addRange(savedRange);
console.log("range ==0 "+e.type, savedRange);
}
}
поразительный:
- то, что Range сохраняется как следует при щелчке мыши (в отношении самого внутреннего элемента, в котором находится курсор, с правильным смещением), но не в том случае, если он сохраняется при нажатии клавиши (чем в отношении самого contenteditable, startOffset всегда 0 , неважно где был курсор)
- Если я запрещаю сохранение курсора при нажатии клавиши и просто использую указатель мыши, чтобы сохранить диапазон, к которому он восстанавливается, как если бы он никогда не сохранялся должным образом или изменялся: ссылка на сам contenteditable, startOffset всегда 0. Поэтому мне интересно объект диапазона изменяется, например отражающие изменения в DOM?