2011-08-27 8 views
14

¿Es posible obtener el elemento padre de un texto seleccionado en la página? Por ejemplo:Obtiene el elemento padre de un texto seleccionado

<div class="someparent"> 

Selection of this text should refer to the 'someparent' class. 

<span class="spanparent">If this is selected, the parent should be this span</span> 

</div> 

Debido al conseguir el texto seleccionado, normalmente se obtiene de la ventana o el documento (en función del navegador), pero es lo que sea posible para obtener el elemento principal del texto seleccionado?

+0

¿Puede expresarlo de otro modo. No puedo tener acceso a lo que necesitas. – Sgoettschkes

+1

Si desea obtener el separador div cuando se selecciona el texto dentro de spanparent, puede usar $ ('span.spanparent'). Select (función() {$ (esto) .parent(); ...}); – Sgoettschkes

+0

@Boo: Esa debería ser una respuesta :) –

Respuesta

30

Esta es una función que le proporcionará el elemento más interno que contiene toda la selección del usuario en todos los navegadores principales (excepto cuando se seleccionan múltiples rangos, que solo es compatible con Firefox. Si esto es importante, puedo expandir ejemplo para hacer frente a ese caso también):

function getSelectionParentElement() { 
    var parentEl = null, sel; 
    if (window.getSelection) { 
     sel = window.getSelection(); 
     if (sel.rangeCount) { 
      parentEl = sel.getRangeAt(0).commonAncestorContainer; 
      if (parentEl.nodeType != 1) { 
       parentEl = parentEl.parentNode; 
      } 
     } 
    } else if ((sel = document.selection) && sel.type != "Control") { 
     parentEl = sel.createRange().parentElement(); 
    } 
    return parentEl; 
} 
+0

¿SUPONGO QUE SELECCIONE EL TEXTO DEL NODO DIFERENTE DE CÓMO RECIBIR A TODOS LOS PADRES? – Ravi

+0

Cómo obtener la identificación del elemento primario si el elemento tiene una extensión de – Ravi

+0

solo para completar la respuesta, 'parentEl.tagName' proporciona la etiqueta adjunta. –

5

me gustaría sugerir a utilizar este

window.getSelection().anchorNode.parentElement 

he probado en OSX 10.9 Safari

+0

-1, cuando realizo la selección, muchos nodos se pueden seleccionar juntos y anchorNode o focusNode cualquiera de ellos puede ser mayor en el árbol DOM (dependiendo de la dirección y longitud de selección). Uno debería obtener un padre que cubra tanto anchorNode como focusNode. –

Cuestiones relacionadas