Подтвердить что ты не робот

Состояние удовлетворительного

Состояние доступного для контента

Разметка, созданная редакторами wysiwyg, является жестокой. Его усеяно атрибутами стиля и часто даже не является допустимым HTML (отсутствующие закрывающие теги, дублирование стилей и т.д.). Существуют ли какие-либо установленные решения проблем, введенных contenteditable? Если нет, как я могу создать его?

Недопустимый HTML

Например, после ввода неупорядоченного списка, за которым следует строка текста в популярном текстовом редакторе, мне представлен следующий HTML-код:

<ul><li>foo</li><li>bar</li></ul><div>baz

Откуда появился тэг div? Почему он не закрывается? Почему, конечно, не абзац - правильно закрыт? Это можно предотвратить?

Не семантический HTML

Другой редактор выпустил следующее:

<p style="font-size:11pt; line-height:115%; margin:0pt 0pt 0pt 36pt; text-indent:-18pt"><span style="color:#000000; font-family:Arial; font-size:11pt; font-style:normal; font-weight:normal; text-decoration:none">●</span><span style="font:7.0pt &#39;Times New Roman&#39;">     </span><span style="color:#000000; font-family:Arial; font-size:11pt; font-style:normal; font-weight:normal; text-decoration:none">Lorem</span></p><p style="font-size:11pt; line-height:115%; margin:0pt 0pt 0pt 36pt; text-indent:-18pt"><span style="color:#000000; font-family:Arial; font-size:11pt; font-style:normal; font-weight:normal; text-decoration:none">●</span><span style="font:7.0pt &#39;Times New Roman&#39;">     </span><span style="color:#000000; font-family:Arial; font-size:11pt; font-style:normal; font-weight:normal; text-decoration:none">ipsum</span></p>

Это допустимая разметка, но она семантически ужасна! Вместо стилизованного неупорядоченного списка редактор вставил буквенные символы пули. Как разработчик, я понятия не имею, что делать с разметкой contenteditable. Что касается стиля, это совершенно бесполезно.

Замены

До недавнего времени я использовал Markdown как инструмент для генерации семантически корректного HTML-кода у пользователей. Тем не менее, Markdown не хватает некоторых функций, которые запрашивают мои пользователи (простота использования для не-техников, позиционирования изображений и т.д.). После поиска редактора wysiwyg, который будет генерировать допустимую семантическую разметку в течение нескольких недель, я обнаружил, что contenteditable делает это невозможным. Кто-то где-то говорит о решениях этих проблем? Как я могу участвовать.

[Обновить] Уточнение

Полагаю, я не был полностью прояснен. Я не прошу о том, чтобы обойти проблемы contenteditable. Я нашел много таких, включая большинство из упомянутых ниже. То, что я пытаюсь найти, является основной причиной этих проблем. Почему contenteditable так сломан? Это связано с техническими проблемами или проблемами устаревшего кода? Более того, что делается для его исправления и где эта работа выполняется?

[Обновить] Документы Google

HTML во втором примере выше приведен в редакторе Документов Google. Однако, как показано ниже, AlfonsoML, Google Docs не использует contenteditable в своем редакторе. Их техника объясняется здесь.

4b9b3361

Ответ 1

Я подозреваю, что в состоянии, в котором он находится по нескольким причинам:

1.) Стандарт HTML5, который его определяет, не определяет, что он должен выводить, оставляя каждую реализацию самостоятельно.

2.) Редактор не знает, хотите ли вы точного представления или семантического. Это часто компромиссы.

3.) Похоже, Mozilla перетащил старый код Netscape Mail/Composer в свою реализацию designMode, а затем перетащил его в contentEditable. Он все еще использует те же пунктирные контуры и небольшие красные ручки, которые существовали 10 лет назад, и я подозреваю огромное количество устаревшего кода.

4.) Похоже, Internet Explorer сделал почти то же самое, и IE никогда не делал ничего должным образом в первую очередь. Он по-прежнему перетаскивает свое наследие в виде причуд и режимов совместимости.

5). Он действительно используется только в системах CMS и в форумах/комментариях, и обычно у них есть довольно тяжелые обертки вокруг реализации. Я не видел много использования в других местах, особенно "голые кости".

6.) Существует несколько успешных онлайн-текстовых процессоров и меньше приложений WYSIWYG или макетов страниц. Давление на создание точных редакторов просто не существует. Хуже того, Microsoft продает оффлайновое программное обеспечение, такое как Word и выражения, которые определенно пострадают от роста на онлайн-редакторах, особенно высококачественных бесплатных.

7.) Microsoft имеет наследие создания инструментов, которые генерируют недействительный и раздутый HTML-код, который до сих пор существует в Outlook 2010 и пакете Office.

8.) Иногда одна и та же команда выбора и редактирования может быть применима к нескольким возможным объектам, занимающим одно и то же пространство, и редактор не может когда-либо знать, какой из них вы хотели бы изменить. Кроме того, команда редактирования может привести к разбиению элемента на undefined или неожиданный путь (опять же, он не будет знать, что вы предпочтете).

Я не верю, что contentEditable никогда не будет так хорош, как сокращение собственного HTML или использование специального инструмента. Я бы просто сосредоточился на запуске некоторых базовых инструментов трещины/восстановления (например, HTMLTidy) по результатам и назвал их день.

Ответ 2

Это сложный вопрос, который каждый решает по-другому.



Я знаю о следующих возможностях:
* Просто отпустите (худший)
* Попробуйте исправить HTML самостоятельно (TinyMCE и CKEditor пытаются сделать это с различным успехом)
* Используйте плагин как XStandard
* Используйте DOM tom, создайте свой собственный редактор - сделайте каретку из DIV, обработайте выбор, редактирование и просто все самостоятельно. Так Google это делает, например. Это требует много кодирования, хотя.

Ответ 3

Для браузеров, поддерживающих contenteditable, решение можно легко взломать; с использованием, например, jQuery для сохранения данных и для добавления новых элементов в редактируемый контент (с кнопками, очевидно), вы получаете простой редактор WYSIWYG с очень небольшим количеством усилия.

Одной из проблем, которые могут быть немного сложнее решить, является правильное размещение этих новых элементов. Однако этот был решен для Webkit, и я уверен, что это можно сделать и в других браузерах.

Редактор, использующий contenteditable, будет легко развернут и облегчен, пусть это определенно стоит разработать, ИМХО.

Изменить: После повторного чтения вашего вопроса я понимаю, что вы действительно искали рабочее решение contenteditable. Я не знаю, почему; AFAIK contenteditable создает допустимую разметку, и если вы полностью контролируете (только позволяя пользователям вставлять элементы и изменять их свойства через ваш пользовательский интерфейс), это также будет семантическим. В AFAIK нет редакторов WYSIWYG, использующих contenteditable, но я мог ошибаться.

Ответ 4

Я думаю, что ваша проблема пытается использовать такой инструмент, как Google Docs, как указано в предыдущем комментарии, а не инструмент, который он действительно сосредоточил на редактировании HTML.

Да, оба типа - WYSIWYG, но я не думаю, что цель GDocs - создать хороший HTML, вместо этого они сосредоточены на предоставлении альтернативы MS Word, даже если им нужно идти и создавать странный HTML-код путь.

Я не могу поверить, что вы изучали это несколько недель, и вы еще не используете CKEditor или TinyMCE. Оба решения включают опции для использования атрибутов, классов или стилей для вывода, просто нужно посмотреть на образцы, немного прочитать документы и настроить их на свои нужды.

Ответ 5

Я ответил на очень похожий вопрос в Редактируемые редакторы текста - почему ситуация выглядит так, и что мы можем, авторы редакторов WYSIWYG, делать с этим.

Да, я знаю, что этот вопрос составляет 2 года, но он все еще обновлен.

Ответ 6

Medium.js!!

Medium.js сохраняет HTML-код в contenteditable семантической, простой, и чистый. Medium.js также поддерживает заполнители, автоматический HR (или BR, или P), события, горячие клавиши, простой и сложный элемент инъекции и многое другое!