Принципиальное отличие состоит в том, что Selection
представляет выбор пользователя, а Range
представляет непрерывную часть документа независимо от визуального представления . Selection
можно (почти) выразить через ноль, один или несколько Range
с, но диапазоны также можно создавать и изменять полностью независимо от выбора.
Существует некоторое перекрытие в функциональности: например, Selection
'deleteFromDocument()
эквивалентно вызову deleteContents()
во всех диапазонах его компонентов, и вы можете получить границы последнего выбранного диапазона в выделении используя свойства anchorNode
, anchorOffset
, focusNode
и focusOffset
. Однако есть несколько принципиальных отличий:
- A
Selection
может содержать несколько диапазонов. Тем не менее, единственный крупный браузер, который поддерживает это, в настоящее время - Firefox.
- A
Selection
может быть «задом наперед», что означает, что конечная граница выделения (представленная focusNode
и focusOffset
) может встречаться в документе раньше, чем начальная граница (anchorNode
и anchorOffset
). Диапазон не имеет направления.
toString()
работает по-другому. В большинстве браузеров (хотя и не в IE 9) вызов toString()
для объекта Selection
возвращает только выбранный видимый текст, тогда как вызов toString()
для диапазона вернет объединение всех текстовых узлов в диапазоне, включая те, которые находятся внутри <script>
элементов и элементов, скрытых с помощью CSS.