我想知道JavaScript中范围和选择对象之间的区别。
在我看来,你可以从这两个中得到相同的功能。在哪种情况下,有任何特定的情况下,你知道两者中的哪一个使用?
根本区别在于Selection
代表用户的选择,而Range
代表文档的连续部分,独立于任何视觉表示。一个Selection
可以(几乎)用零、一个或多个Range
s来表示,但范围也可以完全独立于选择而创建和修改。
在功能上有一些重叠:例如,Selection
的deleteFromDocument()
相当于在其所有组件范围上调用deleteContents()
,并且您可以使用anchorNode
, anchorOffset
, focusNode
和focusOffset
属性在选择中获得最近选定范围的边界。然而,有一些关键的区别:
- 一个
Selection
可以包含多个range。然而,目前唯一支持此功能的主要浏览器是Firefox。 - A
Selection
可能是"向后的",我的意思是选择的结束边界(由focusNode
和focusOffset
表示)可能比开始边界(anchorNode
和anchorOffset
)更早出现在文档中。Range没有方向 -
toString()
的工作方式不同。在大多数浏览器中(虽然不是ie9),在Selection
对象上调用toString()
只返回被选中的可见文本,而在范围上调用toString()
将返回范围内所有文本节点的串联,包括那些在<script>
元素和通过CSS隐藏的元素。