Ответ 1
Возможно, вы можете моделировать события textInput
для управления содержимым текстового поля. Изменения, внесенные таким образом, соблюдаются путем отмены/повтора, я думаю (я знаю, что они находятся в Safari)
var element = document.getElementById('someTextarea');
var text = 'This text will be inserted in the textarea';
var event = document.createEvent('TextEvent');
event.initTextEvent('textInput', true, true, null, text);
element.dispatchEvent(event); // fire the event on the the textarea
В принципе, текст вставляется так, как если бы вы вставляли его сами. Поэтому, если что-то будет выбрано, оно будет заменено текстом. Если выбора нет, текст будет вставлен в положение каретки. И undo/redo должен работать нормально (отмена/повторное редактирование всей вставленной строки за один раз), потому что браузер действует так, как будто вы сами ввели/вставляли его.
Как я уже сказал, я знаю, что это работает как прелесть с отменой/повторением в Safari, поэтому я предполагаю, что это работает и в Chrome.