Есть блок:
<div contenteditable="true" id="editable-div"></div>
Хочу реализовать функционал хэштегов с помощью этого кода:
const editableDiv = document.getElementById('editable-div');
editableDiv.addEventListener('input', function(event) {
let a = editableDiv.innerHTML;
if (a.indexOf('#') !== -1) {
event.preventDefault();
const editableDiv = document.getElementById('editable-div');
let a = editableDiv.innerHTML;
// Сохраняем текущую позицию курсора
const selection = window.getSelection();
const range = selection.getRangeAt(0);
const startContainer = range.startContainer;
const startOffset = range.startOffset;
// Изменяем содержимое блока
a = a.replace(/#(\w+)/g, '<a href="#">#$1</a>');
editableDiv.innerHTML = a;
// Восстанавливаем позицию курсора
const newRange = document.createRange();
newRange.setStart(startContainer, startOffset);
selection.removeAllRanges();
selection.addRange(newRange);
}
});
Почему после изменения содержимого блока:
a = a.replace(/#(\w+)/g, '<a href="#">#$1</a>');
editableDiv.innerHTML = a;
Курсор всегда находится в начале? Как это исправить? event.preventDefault(); не работает.
И восстановление позиции не работает:
const newRange = document.createRange();
newRange.setStart(startContainer, startOffset);
selection.removeAllRanges();
selection.addRange(newRange);