2011-10-23 10 views
5

¿Puedo consultar (en un sentido jQuery) de los elementos DOM - no sólo nodos de texto completo - seleccionados por el ratón?: la selección del selector

+0

¿Qué significa "resaltar" exactamente? Y, aún más, ¿qué significa "resaltar parcialmente"? – Jon

+0

Eche un vistazo a esto: http://stackoverflow.com/questions/7803016/how-to-wrap-html-tag-for-jquery-mouseup-selection-wrods/7803559#7803559 –

+1

@Randomblue "seleccionado" es el término más familiar para eso ... –

Respuesta

2

Esto le dará todos los elementos que están completamente seleccionados:

var currentSelection = window.getSelection(); 
var firstRangeInSelection = currentSelection.getRangeAt(0); 
var commonAncestor = firstRangeInSelection.commonAncestorContainer; 

var nodesInSelection = $(commonAncestor).find("*").filter(function() { 
          return currentSelection.containsNode(this, false); 
         }); 

Para obtener más información sobre las selecciones de DOM, echa un vistazo a this page.

+0

+1, aunque se mejoraría con unas pocas comprobaciones: primero, IE <9 no admite 'window.getSelection()' por lo que debe verificar la existencia de eso; segundo, 'getRangeAt (0)' arrojará un error si no se selecciona nada, por lo que debe verificar que 'currentSelection.rangeCount' sea mayor que cero. –

+0

En realidad, ¿qué sucede si la selección está completamente contenida dentro de un solo nodo de texto? Supongo que obtendrás un objeto jQuery vacío. –

1

Se pueden adaptar mi respuesta a la siguiente pregunta para que devuelva un objeto jQuery en lugar de una matriz, que debe ser simple:

JS: Get array of all selected nodes in contentEditable div

Sin embargo, esto no funcionará en IE < 9, que no admite el mismo objeto Selection que otros navegadores. Para eso, necesitarás otro enfoque. Existe mi propia biblioteca Rangy, como se menciona en esa respuesta, pero si necesita el soporte de IE < 9 sin una biblioteca, entonces puedo tocar algo juntos.

+0

¿Qué quiere decir con "en lugar de una matriz"? Mi solución también devuelve un objeto jQuery. Lo siento si no estuvieras hablando de mí :) –

+0

@Chris: No me refería a tu respuesta. Había asumido que OP preferiría una colección jQuery en lugar de una matriz, que es a lo que la respuesta mía a la que me vinculé produce. –

Cuestiones relacionadas