2011-04-06 22 views
18

Quería saber la diferencia entre el rango y el objeto de selección en JavaScript.Diferencia entre rango y selección en el navegador

Me parece que puede obtener la misma funcionalidad de cualquiera de estos dos. En ese caso, ¿hay alguna circunstancia específica en la que sepa cuál de los dos usar?

+0

Mire esta tabla: http://www.quirksmode.org/dom/range_intro.html#link2. – Blender

Respuesta

26

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.