Подтвердить что ты не робот

Разница между диапазоном и выбором в браузере

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

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

4b9b3361

Ответ 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.