execCommand insertHTML ломает сохраненное window.getSelection () - PullRequest
1 голос
/ 23 марта 2012

При использовании методов выделения текста и восстановления выделенного текста на странице я обнаружил, что выполнение 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 Ответ

3 голосов
/ 23 марта 2012

Как лучше сохранить и восстановить выбор, зависит от того, что вы делаете. Для вашего конкретного примера, где в существующем тексте просто преобразуется регистр, я бы предложил подход, основанный на индексировании символов, например https://stackoverflow.com/a/5596688/96100 (хотя этот ответ требует Rangy, но его можно тривиально изменить, не требуя его : http://jsfiddle.net/Y8pJ7/8).

В некоторых других случаях лучшим подходом является использование невидимых элементов маркера в начале и конце выделения, что является подходом, принятым модулем сохранения / восстановления выбора из Rangy (раскрытие: я автор Ранги).

ОБНОВЛЕНИЕ 18 июня 2012 года

Rangy теперь имеет сохранение и восстановление выборок и диапазонов на основе смещения символов с помощью нового TextRange модуля ( demo ).

...