2011-04-06 46 views
18

我想知道范围和JavaScript中的选择对象之间的区别。范围和浏览器中的选择之间的区别

在我看来,你可以从这两者中获得相同的功能。在这种情况下,您是否有任何具体情况可以知道使用哪一种?

+0

看看这张表:http://www.quirksmode.org/dom/range_intro.html#link2。 – Blender 2011-04-06 21:22:24

回答

26

其基本区别在于Selection代表用户的选择,而Range代表文档的连续部分,独立于任何视觉表示。 A Selection可以(几乎)以零,一个或多个Range的形式表达,但范围也可以独立于选择完全创建和修改。

有一个在功能上有些重叠,例如:SelectiondeleteFromDocument()相当于调用其所有成分范围的deleteContents(),并且可以使用anchorNodeanchorOffset获得最近选定范围的边界在选择,focusNodefocusOffset属性。但是,有一些关键的区别:

  • A Selection可能包含多个范围。但是,目前唯一支持这一功能的主要浏览器是Firefox。
  • Selection可以是“向后”,我的意思是早文档比开始边界(anchorNodeanchorOffset)中可能会发生的选择(由focusNodefocusOffset表示)的端部边界。范围没有方向。
  • toString()工作原理不同。在大多数浏览器中(虽然显然不是IE 9),在Selection对象上调用toString()只返回所选的可见文本,而在Range上调用toString()将返回范围内所有文本节点的连接,包括<script>元素中的所有文本节点和通过CSS隐藏的元素。
相关问题