2012-03-23 9 views
1

При использовании методов выбора текста и восстановления выделенного текста на странице я обнаружил, что работающий execCommand('insertHTML... inbetween заставляет сохраненный выбор прерываться.execCommand insertHTML breaks stored window.getSelection()

Это образец того, как текст выбран и восстановлен.

// 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/

Цель этой скрипки - выбрать текст, преобразовать его в верхний регистр, а затем повторно выбрать текст.

ответ

3

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

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

UPDATE 18 июня 2012

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

+0

Действительно хороший Тим, спасибо, что нашли время, чтобы подключить мою скрипку. – Blowsie

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

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