Недавно я работал с contenteditable на странице HTML5 и сталкивался с ошибками при использовании его с определенными элементами, и я хотел бы знать, где и как я могу на самом деле безопасно его использовать.
Я обнаружил, что создание элемента span приводит к содержанию контента в некоторых ошибках в Firefox 1 и Chrome 2. Однако создание div или раздела contenteditable полностью безопасно 3.
Руководящий принцип, о котором говорили несколько человек, состоит в том, что только элементы уровня блока должны быть сделаны контентными. Однако в Mozilla Developer Network перечислены элементы заголовка h1 до h6 как элементы уровня блока a > , а элемент заголовка contenteditable не работает в Firefox 4 и может привести к сбою страницы в Chrome 5.
Я бы хотел использовать больше, чем просто divs и разделы, но я не понимаю, на каких элементах я действительно могу сделать контент доступным. Разумеется, я имею в виду, что, используя элемент в нормальных условиях, я должен иметь возможность выполнять обычные задачи редактирования, не выполняя неожиданные или ошибочные вещи. Я должен уметь писать в нем, удалять контент, вырезать, копировать, вставлять и перемещать текстовый курсор и выделять текст без неожиданного или странного поведения.
Итак, какие элементы я могу сделать безопасным? Существует ли определенная категория? Существуют ли определенные критерии, которым должен соответствовать безопасный контент?
Примечания об ошибках:
1. Firefox 21 w/span: Элемент теряет фокус, если текстовый курсор доведен до начала или конца элемента, но если он попал туда, удалив контент. Выделение части элемента, вырезание и затем склеивание разделит элемент на два в этой точке, а затем вставьте пустой элемент между двумя частями - без фактического ввода текста, который вы пытались вставить в любом месте.
2. Chrome 27 w/span: Если диапазон охватывает несколько строк, например. будучи сломанным, вырезание и вставка содержимого часто вставляют штриховую линию после вставляемого содержимого.
3. Если вы не делаете div-дисплей: inline, в этом случае он все равно может потерять фокус, как в 1, но, видимо, только если вы доведите текстовый курсор до конца. Я не рассматриваю это "нормальное" использование элемента. 4. Firefox 21 w/heading: выбор части содержимого, тогда резка и вставка будут, подобно 1, разбивать элемент заголовка пополам в этой точке и вставлять третий элемент заголовка между двумя половинами. Он, по крайней мере, будет иметь вложенное содержимое внутри него, но теперь у вас есть три элемента заголовка, из которых первоначально был один.
5. Chrome 27 w/heading: выберите некоторый контент, вырежьте и вставьте. Сбой страницы. Вы получаете "Aw snap!" сообщение. Что это.
A jsFiddle в соответствии с запросом.
Здесь ссылка на jsFiddle для воспроизведения выше. Это довольно просто, хотя на данный момент единственное, что он не воспроизводит, это ошибка потерять фокус. Это довольно просто:
<article style="width: 100px">
<h1 contenteditable="true">Heading</h1>
<p>
<strong>Some adjacent content</strong>
<span contenteditable="true">Span! This is long enough it will spread over multiple lines.</span>
</p>
<div style="display: inline" contenteditable="true">An inline div also with multiple lines.</div>
</article>