Положение курсора в начале встроенного элемента внутри contenteditable div - PullRequest
0 голосов
/ 30 апреля 2020

Я прочитал много вопросов и ответов от stackoverflow, но пока не нашел ответа на мою проблему. Я хотел бы установить позицию каретки внутри дочернего узла в contenteditable div, в частности, я хочу поместить курсор в начало дочернего узла.

Вот иллюстрация, где вы можете следовать вдоль : http://jsfiddle.net/sarkiroka/zgx4njtr/

В приведенном выше примере я добавил теги :before и :after, чтобы лучше проиллюстрировать позиции, которые в настоящее время недоступны с помощью клавиатуры или нажатия, они не должно влиять на окончательное решение.

А вот пример разметки, если jsfiddle больше не будет доступен:

<div contenteditable=true>123<b>567</b>890</div>

Я хочу установить позицию курсора между 3 и 5. Я ожидаю, что браузеры отобразят для этого 2 позиции: первая - «после 3», которая находится за пределами тега <b>, а вторая - «до 5», которая находится в пределах <b>. В первом случае я мог писать с нормальным весом шрифта, а во втором - жирным шрифтом.

Что бы я ни пытался сделать, чтобы текст в позиции «до 5» был жирным, я всегда получаю текст в нормальный вес шрифта.

Мой сценарий: я щелкаю в этой области редактирования между 5 и 6. После этого я нажимаю стрелку влево на клавиатуре. В этой новой позиции я ожидаю, что смогу печатать жирным шрифтом, но в результате получится текст с обычным весом шрифта.

Я ожидаю, что предполагаемое поведение будет следующим:

  • щелкните между 5 и 6.
  • нажмите стрелку влево один раз: курсор вставляется между 3 и 5 (набирается жирным шрифтом)
  • нажмите стрелку влево второй раз: курсор между 3 и 5 (печатание теперь в норме)
  • нажмите стрелку влево в третий раз: символ вставки находится между 2 и 3 (ввод по-прежнему в норме)
  • нажмите стрелку влево в четвертый раз: символ вставки между 1 и 2 (набор текста все еще нормальный)

Интересно, что это работает, когда я устанавливаю <b> на display:block, но не когда на display:inline или display:inline-block, и я хотел бы сохранить элемент с его исходным свойством display.

Я ищу решение, которое работает в Chrome, в настоящий момент не заинтересованное никакими другими браузерными решениями.

Кроме того, я хотел бы видеть идеи vanilla css / js, н не ссылки на библиотеки.

...