ExecCommand insertHTML breaks хранит window.getSelection()
При использовании методов выбора текста и восстановления выделенного текста на странице, я обнаружил, что выполнение execCommand('insertHTML...
inbetween заставляет сохраненный выбор прерываться.
Это пример выбора и восстановления текста.
// Get Selection
var sel = window.getSelection().getRangeAt(0);
// Clear Selections
window.getSelection().removeAllRanges();
// Restore Selection
window.getSelection().addRange(sel)
Это отлично работает, однако после запуска execCommand('insertHTML..
выбор endOffset
устанавливает то же значение, что и выбор startOffset
Есть ли причина для этого? Что еще более важно, есть ли способ обойти это?
Здесь можно увидеть полный пример ошибки, в том числе с базовым консольным протоколированием.
http://jsfiddle.net/blowsie/Y8pJ7/
Цель этой скрипты - выбрать текст, преобразовать его в верхний регистр и затем повторно выбрать текст.
Ответы
Ответ 1
Как лучше всего сохранить и восстановить выбор действительно зависит от того, что вы делаете. В вашем конкретном примере, когда существующий текст просто преобразует свой случай, я бы предложил подход с индексом на основе символов, например fooobar.com/info/21452/... (хотя для этого требуется Rangy, но может быть тривиально изменен, чтобы не требовать его: http://jsfiddle.net/Y8pJ7/8).
В некоторых других случаях лучшим подходом является использование невидимых элементов маркера в начале и в конце выбора, что является подходом, выбранным выбором сохранить/восстановить модуль Rangy (раскрытие: я автор Rangy).
ОБНОВЛЕНИЕ 18 июня 2012 г.
Rangy теперь имеет поддержку на основе смещения на основе символов и восстановление выбранных и диапазонов с помощью нового модуля TextRange (demo).