2012-05-12 31 views
7

używam biblioteki rangy i można zaznaczyć tekst w zawartości edycji następująco:Pierwsze węzeł nadrzędny dla zaznaczonego tekstu z smukły biblioteki

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

nie mogę dowiedzieć się, jak uzyskać zaznaczonego tekstu węzeł/element macierzysty. Na przykład, jeśli wybieram tekst, który ma być w jaki sposób mogę dołączyć silny węzeł lub element H1 również?

+1

Przesyłanie wiadomości dalej Niektóre widzę, że mogę użyć: sel.anchorNode.parentNode.nodeName – Frank

Odpowiedz

8

sel.anchorNode.parentNode spowoduje przejście do węzła nadrzędnego węzła zawierającego tylko jeden koniec zaznaczenia. Aby uzyskać najgłębszy element zawierający cały wybór, najłatwiej jest uzyskać zasięg z zaznaczenia i sprawdzić jego właściwość commonAncestorContainer (która może być węzłem tekstowym, w którym to przypadku trzeba uzyskać jego obiekt nadrzędny):

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

Wielkie dzięki bardzo! – Frank

+0

Działa to tylko wtedy, gdy zaznaczymy tekst w znaczniku 'strong' lub' h1', a nie po zaznaczeniu obu. Jak to zrobić dla wybranego fragmentu dla obu tagów (text: text my)? – kicaj

Powiązane problemy