2012-05-12 19 views
7

estoy usando la biblioteca rangy y puedo seleccionar texto en un contenido editable de la siguiente manera:Conseguir el nodo primario para el texto seleccionado con la biblioteca de alto y delgado

var sel = rangy.getSelection(); 
alert(sel); 

no puedo encontrar la manera de obtener el texto seleccionado nodo/elemento padre Por ejemplo, si estoy seleccionando texto que es

<strong>My Text</strong> 
or 
<h1>My Title</h1> 

¿cómo puedo incluir el nodo fuerte o el elemento H1 también?

+1

Jugueté un poco más Veo que puedo usar: sel.anchorNode.parentNode.nodeName – Frank

Respuesta

8

sel.anchorNode.parentNode obtendrá el nodo primario del nodo que contiene solo un extremo de la selección. Para obtener el elemento que contiene más interno para toda la selección, lo más fácil es obtener un rango de la selección y ver su propiedad commonAncestorContainer (que puede ser un nodo de texto, en cuyo caso debe obtener su elemento principal):

var sel = rangy.getSelection(); 
if (sel.rangeCount > 0) { 
    var range = sel.getRangeAt(0); 
    var parentElement = range.commonAncestorContainer; 
    if (parentElement.nodeType == 3) { 
     parentElement = parentElement.parentNode; 
    } 
} 
+0

¡Muchas gracias! – Frank

+0

Esto funciona solo cuando seleccionamos texto en la etiqueta 'strong' o' h1', no cuando seleccionamos ambos. ¿Cómo hacer esto para el fragmento seleccionado para ambas etiquetas (texto: texto mi)? – kicaj

Cuestiones relacionadas