La diferencia fundamental es que un Selection
representa la selección del usuario, mientras que Range
representa una parte continua de un documento independientemente de cualquier representación visual. Un Selection
puede (casi) expresarse en términos de cero, uno o más Range
s, pero los rangos también se pueden crear y modificar completamente independientemente de la selección.
Existe un cierto solapamiento en la funcionalidad: por ejemplo, Selection
's deleteFromDocument()
es equivalente a llamar deleteContents()
en todas sus gamas de componentes, y se puede obtener de los límites del rango seleccionado más recientemente en la selección utilizando el anchorNode
, anchorOffset
, focusNode
y focusOffset
propiedades. Sin embargo, hay algunas diferencias cruciales:
- A
Selection
puede contener rangos múltiples. Sin embargo, el único navegador importante que admite esto actualmente es Firefox.
- Un
Selection
puede ser "hacia atrás", por lo cual quiero decir que la frontera final de la selección (representado por focusNode
y focusOffset
) se puede producir antes en el documento que el límite de inicio (anchorNode
y anchorOffset
). Un Rango no tiene dirección.
toString()
funciona de manera diferente. En la mayoría de los navegadores (aunque notablemente no IE 9), llamar al toString()
en un objeto Selection
devuelve solo el texto visible que está seleccionado, mientras llama al toString()
en un Rango devolverá una concatenación de todos los nodos de texto dentro del rango, incluidos aquellos dentro de los elementos <script>
y elementos ocultos a través de CSS.
Mire esta tabla: http://www.quirksmode.org/dom/range_intro.html#link2. – Blender