2011-12-17 5 views
5

Я работаю над профилем contenteditable, чтобы сделать простой RichText-Editor. Одно из требований, которое у меня есть, - это возможность вставлять html chunk в позицию курсора на событие кнопки.Может ли `range.insertNode` быть отменен с помощью отмены браузера, в контентном div?

Я был в состоянии получить, что часть работает отлично с помощью range, selection, range.insertNode(nodeHTML) или range.pasteHTML(nodeHTML) на основе браузера. Но я не мог получить две вещи, в идеале я хотел бы иметь

  1. Быть способным отменить вставленный узел, используя откат браузера. Так или иначе, браузер игнорирует выше действия.
  2. Чтобы переместить курсор в конец вставленного узла. Так что пользователь может начать писать после

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

Спасибо.

+0

Это может помочь вам: http://code.google.com/p/rangy/ - Также ознакомьтесь с демонстрационными примерами. – techfoobar

+0

К сожалению, у Rangy нет функциональности отмены. –

ответ

8

Ответ переписано августа 2013

К сожалению нет, хотя ситуация улучшается. Программные мутации DOM, отличные от тех, которые были вызваны document.execCommand(), не входят в встроенный стек отскока браузера. Тем не менее, там было два недавних события:

  • IE 11 имеет новые ms-beginUndoUnit и ms-endUndoUnit команды
  • Там находится в работах для стека отмены доступных для веб-разработчиков, часть из которых были реализованы в WebKit spec и Firefox (примечание: it's disabled by default in Firefox и, видимо, также в WebKit).

Пока ситуация не улучшится, вы можете использовать document.execCommand("InsertHTML", false, "<b>Some html</b>");, но это не поддерживается в IE.

+0

Я думаю, что пользователи IE должны делать это без отмены. Использование 'insertHTML' является решением обеих моих проблем. Благодарю. И, кстати, ваш rangy впечатляет. – simplyharsh

+1

Похоже, что Microsoft может сделать что-то по этому поводу; IE 11 имеет команды * ms-beginUndoUnit * и * ms-endUndoUnit *, которые собирают любые изменения DOM, которые происходят между двумя, отталкивая их в стопку отмены как один шаг отмены. –

+1

@ AndyE: О, я не знал об этом. Хорошие новости, хотя я бы предпочел, чтобы они внедрили спецификацию. –

 Смежные вопросы

  • Нет связанных вопросов^_^