Маленький рецептик — записать, чтоб не забыть, да и вдруг кому пригодится. Когда мы используем в HTML атрибут
contenteditable, может возникнуть желание (и почти наверняка возникнет) сохранять выделение редактируемого
текста при кликах снаружи (например, на какие-нибудь кнопки). Сделать это можно например так:
Это, конечно, крайне примитивный пример, который, скажем, не проверяет, что выделение само по себе находится
в редактируемой области, проверяет только то, что клик не в ней.
В принципе, механизм очевиден, пояснения по методу compareDocumentPosition() можно найти в документации Mozilla,
или на JavaScript.ru.
В процессе довелось столкнуться с интересным моментом — при абсолютном позиционировании элементов на странице
могут быть области ничем не покрытые, в т.ч. и элементом body. Соответственно, обработчик события на них
не срабатывает, и выделение сбрасывается. Чтобы этого не происходило, я использовал CSS: