Сценарий
У меня есть contenteditable <div>
область, и внутри этой области у меня может быть некоторый <span contenteditable="false"></span>
содержащий некоторый текст. Идея состоит в том, что эти элементы span будут представлять собой стилизованный текст, который нельзя редактировать, но его можно удалить из области <div contenteditable="true"></div>
, нажав клавишу возврата.
Проблема
Размещение курсора здесь большое. если вы удалите один из этих элементов <span>
, курсор переместится в конец <div>
. Более интересно, если вы набираете текст, когда курсор находится "в конце", размещение текста просто отлично... Затем, если вы удаляете только что напечатанный текст, курсор отскакивает назад!
Я подготовил скрипку, которая продемонстрирует это. Мне нужно, чтобы это работало только в Chrome, а другие браузеры сейчас либо неактуальны, либо имеют обходные пути. (Также обратите внимание, что подготовленный Fiddle создан для демонстрации этого только в Chrome).
Fiddle
Инструкция Fiddle: Версия Chrome версии 39.0.2171.95 м (64-разрядная версия), воспроизводимая также в 32-разрядной версии
- Нажмите
<div>
область - Введите "123"
- Backspace "3" Backspace "2" Backspace "1"
Дополнительные сведения
Внимательно изучив это, я столкнулся с различными вопросами SO, которые похожи, но заимствование связанных решений не оказалось серебряной пулей, которой я пользуюсь. Я также обнаружил проблемы для проекта Chrome, которые, похоже, нацелены (возможно, не в точном порядке) на проблему, описанную выше, и могут быть просмотрены ниже.
- Проблема 384357: Позиция Caret внутри контентной области с неотредактированными узлами
- Проблема 385003: Вставить стиль каретки неправильно при достижении конца строки в контентном элементе
- Проблема 71598: Переместить в неправильное положение после не редактируемого элемента в конце contentEditable
Ближайшее решение SO, которое я нашел, может быть здесь. Идея в этом решении состоит в размещении ‌
символов после элементов <span>
, но если я хочу удалить мой <span>
, вместо этого я удалю ‌
... заставляя мой курсор прыгать до конца, предлагая странный опыт пользовательского интерфейса, не удаляя мой <span>
по моему "начальному удалению ключа".
Вопрос
Кто-нибудь испытал эту проблему и нашел работу? Я приветствую любое возможное решение, даже когда JS взломан, когда они приходят. Я пришел к выводу, что использование contenteditable
сопровождается списком белья, но это, по-видимому, последняя оставшаяся трудность, которую я сейчас испытываю.