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

Есть что-то лучше, чем document.execCommand?

При внедрении веб-редактора с расширенным текстом я читаю, что document.execCommand полезен для выполнения операций над HTML-документом (например, выделение выделенного жирным шрифтом). Однако мне нужно немного лучше. В частности, мне нужно точно знать, какой текст добавлен или удален из innerHTML, и в каком месте (как смещение во всем представлении HTML документа).

Я рассмотрел использование встроенного документа document.execCommand вместе с наблюдателем мутации DOM4, но execCommand не соответствует задаче:

  • Я не вижу способ выбора "без смещения"
  • Сгенерированный html, похоже, отличается от браузера к браузеру. (Я бы хотел, чтобы теги <span> не были <b> , но более важна последовательность)
  • и нет информации о том, что он делает для обработки избыточно вложенных /span > .

Кроме того, использование мутационного наблюдателя кажется немного излишним, исходя из моих потребностей.

Моя мотивация: я пытаюсь периодически передавать изменения документа на сервер, не перепродавая весь документ. Я отправляю данные в виде набора вложений и удалений по представлению HTML. Если кто-то знает способ получить эту функциональность, скажем, CKEditor (так что мне не нужно начинать с нуля), тогда я буду любить тебя навсегда.

Примечание. Выполнение текстового разбора не является вариантом из-за низкой производительности на очень больших документах.

В противном случае я не совсем боюсь пытаться написать что-то, что делает это. Методы, предоставляемые объектом диапазона DOM, будут обрабатывать большую часть тяжелого подъема. Я также ценю советы относительно этой возможности.

4b9b3361

Ответ 1

Существует одна альтернатива использованию execCommand - реализация всего взаимодействия редактора, включая мигание курсора. И это было сделано. Google делает это в документах, но там есть что-то свободное и с открытым исходным кодом. Cloud9 IDE http://c9.io имеет реализацию. AFAIK, github использует этот редактор уже некоторое время. И вы, безусловно, можете что-то сделать под этим, потому что нет встроенного кода - например, в execCommand

Репо находится здесь: https://github.com/ajaxorg/cloud9 (он содержит всю IDE, вам нужно будет найти код для редактора.)

События с мутацией dom - устарели. Если вы можете отказаться от поддержки старых браузеров, попробуйте мутационный наблюдатель. Если нет - попробуйте вообще не обнаруживать изменения DOM и перехватывать изменения в реализации редактора. Возможно, это будет и путь для новых браузеров.

Ответ 2

Есть Trix богатый текстовый редактор, из их описания он выглядит так, будто избежать несогласованного execCommand - это весь смысл проекта.