Как превратить contentEditable в редактор структурированной разметки? - PullRequest
6 голосов
/ 29 июня 2010

Есть LyX и такие редакторы, которые пытаются гарантировать, что вы пишете текст, который имеет четкую структуру. Мне нужно то же поведение из поля html5 contentEditable, но я не знаю, как.

Мои требования:

  • Теги DIV не созданы.
  • Текст не допускается вне текстового контейнера. (абзацы, заголовки, преблоки и встроенные элементы)

Мне также нужно выяснить, как пройти через контент и отправить его на сервер в этой ограниченной форме.

(Я также люблю хорошую документацию на вещи, которые я могу сделать для contenteditable -поля)

1 Ответ

5 голосов
/ 21 июля 2010

Вот спецификация DOM для того, что значит для элемента быть редактируемым: http://www.w3.org/TR/html5/editing.html#editable

Звучит так, будто все существующие теги абзацев и теги заголовков могут быть удовлетворены, и я получу то, что вы хотите, если я понимаю, о чем вы спрашиваете. Если вы хотите, чтобы пользователь мог вставлять новые абзацы и заголовки, клавиша Enter во время редактирования вставит разрывы строк как теги <br> в Chrome, но если пользователь введет теги HTML, они будут экранированы и будут отображаться как текст. Что касается вставки другого отформатированного контента, это полностью зависит от пользовательского агента; мои тесты в Chrome показывают, что он явно не позволяет пользователю вставлять жирный шрифт / курсив / и т.д. текст.

РЕДАКТИРОВАТЬ : по-видимому, в Chrome (и, вероятно, по расширению, Safari), нажатие Control-I, Control-B, Control-U вызывает то же поведение, которое вы могли ожидать от редактора форматированного текста!

Я также тестировал в Firefox и обнаружил, что, в отличие от Chrome и не совсем противоречащий спецификации, он фактически вставляет новые теги <p> вместо <br> с добавленным атрибутом _moz_dirty="". Вам не нужно удалять это; если Firefox следует спецификации, он никогда не сломает DOM, вставив таким образом текст вне тега. Но учтите, что пользователи, использующие Chrome и Firefox, будут создавать разные HTML-структуры, которые вы можете сгладить с помощью Javascript или серверной дезинфекции ... У меня также нет IE, доступного на этом компьютере, чтобы понять, как он обрабатывает К сожалению, в новой строке не указывается документация Microsoft.

Что касается отправки его на сервер, вы можете сделать это с помощью AJAX, потянув текстовое содержимое рассматриваемых элементов (или просто сделав все <div> contenteditable), построив массив их текстового содержимого, а затем разместив POSTing. это к серверу. Это довольно легко сделать с помощью jQuery (дополнительную информацию по этому вопросу можно получить по запросу).

...