Ответ 1
Вот что я нашел:
Отброшенное поведение контентных списков в Opera и Chrome происходит только в том случае, если за родительским элементом
ul
не следует какой-либо другой элемент с минимальным размером рендеринга 1px x 1px. Значениеdisplay
элемента не имеет значения, если оно не пустое или имеет размер высоты установки с CSS.
Таким образом, добавление простого <div style="height: 1px;">
ответит на ваш самый прямой вопрос.
Однако вы не можете надежно использовать contenteditable
списки в HTML во время запроса.
Этот вопрос заинтриговал меня, и я тестировал его на Moz FF 29-30, Opera 21, Google Chrome 35 и IE 11, на Win 8.1. Я тестировал простые клавиши типа Enter, Backspace и Delete.
TL; DR: IE 11 полностью испорчен, Opera и Chrome очень хороши, если за
ul
следует элемент с отображенным размером, а Moz FF вставляет странный<br type="_moz"></br>
тег. Вам понадобитсяe.preventDefault()
,e.keyCode/charCode
иSelection
иRange
JS API для создания настраиваемого списка контента, который будет работать последовательно во всех браузерах. Однако эти предварительные требования уже не работают последовательно во всех браузерах. Лучшее решение: используйте существующие редакторы или невидимый ввод текста для ввода.
Это подробные сведения:
Нажатие Enter для добавления нового li
добавит следующую разметку:
- Opera и Google Chrome:
<li><br><li>
- Moz FF:
<li><br type="_moz"></br>
- IE 11: если активный
li
не пуст:<li><br></li>
, если он пуст, IE полностью запутывает и вставляетp
, а затем дублирует пустой<ul contenteditable="">
после него, только с<br>
тег внутри. Этот пустойul
будет добавлен после элемента, следующего за исходным элементом, если таковой имеется.
Нажатие Backspace для удаления li:not(:first-child)
сделает следующее:
- Opera и Google Chrome: если за
ul
не будет следовать элемент с размером рендеринга, всеli
будут удалены. Если это так, ожидается ожидаемое поведение. (удаляется одинli
). - Moz FF: ожидается ожидаемое поведение (удаляется один
li
). Однако Moz FF выведет курсор из области, пригодной для контента, после удаленияli
. - IE 11: То же поведение, что и при нажатии Enter.
Нажатие Backspace для удаления первой li
должно быть предотвращено любой ценой.
Для каждого проверенного браузера это разбивает список. Все новые образы Enter генерируют div
как прямые дочерние элементы списка.
Нажатие Delete для удаления последующего li
работает последовательно во всех проверенных браузерах. Последующий li
будет удален, и любое содержимое внутри него будет перенесено в текущий li
Ввод первой буквы в пустой li
будет делать следующее:
- Opera, IE11 и Google Chrome: письмо печатается. Автоматически вставленный тег
<br>
удаляется. - Moz FF: письмо печатается. Пользовательский тег
<br type="_moz">
удален не.
Удаление единственной буквы в пустой li
сделает следующее:
- Opera, IE11 и Google Chrome: добавлен другой тег
<br>
. - Moz FF: Ничего. Пользовательский
<br type="_moz">
все еще присутствует.
Fiddle: http://jsfiddle.net/8Q53V/8/ (первая строка ul с пользовательским кодированным поведением, не совершенная, вторая ul является стандартной)