Ответ 1
Основное отличие состоит в том, что Selection
представляет выбор пользователя, а Range
представляет непрерывную часть документа независимо от любого визуального представления. A 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.