Я пытаюсь сделать текстовый редактор, который форматирует текст в зависимости от того, что он говорит. Например, когда вы набираете «select», он меняет цвет слова «select» на красный. Я использую contenteditable
div
.Как сохранить позицию каретки при изменении текста, содержащего контент?
Мне удалось изменить цвет, но каждый раз, когда я меняю текст, курсор перемещается в начало div
.
Вот мой пример:
var replace = function(text, q, r){
text=text.split(q);
var result = text[0];
for(var i = 1; i < text.length; i++){
result += r + text[i];
}
return result;
};
var run = function(){
document.getElementById('code_editor').innerHTML
= replace(document.getElementById('code_editor').textContent, "select", "<span class='start'>select</span>");
}
$('#code_editor').keyup(function (event) {
run();
});
#code_editor {
width: 600px;
height: 100px;
box-shadow: inset 0px 0px 2px black;
padding: 5px;
overflow-y: scroll;
}
.start {
color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<code><div id="code_editor" contenteditable tabindex="1"></div></code>