@TerritoryOfPeace
Изучаю php

Почему замена содержимого блока через innerHTML предотвращает стандартное поведение браузера?

Есть блок:
<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);
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Так вы сперва заменяете innerHTML, а после этого сохраняете и восстанавливаете позицию курсора.
Проблема в том, что на момент сохранения позиции курсор уже в начале :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
28 апр. 2024, в 17:10
20000 руб./за проект
28 апр. 2024, в 15:00
100000 руб./за проект
28 апр. 2024, в 14:43
5000 руб./за проект