Разница между диапазоном и выбором в браузере - PullRequest
21 голосов
/ 07 апреля 2011

Я хотел узнать разницу между диапазоном и объектом выделения в JavaScript.

Мне кажется, что вы могли бы получить одинаковую функциональность от любого из этих двух. В каком случае существуют какие-либо конкретные обстоятельства, когда вы знаете, какой из двух использовать?

1 Ответ

31 голосов
/ 07 апреля 2011

Принципиальное отличие состоит в том, что 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...