2011-02-06 18 views
5

Buduję prosty edytor WYSIWYG wewnątrz elementu iframe z włączonym trybem projektowania, obecnie mogę zaznaczać wybrany tekst pogrubieniem, kursywą i podkreśleniem, a także linkować i działają poprawnie.Javascript: Wykryj węzeł rodzica opiekuna

Ale chciałbym wiedzieć, kiedy caret jest wewnątrz b, i, u, a, znaczniki, więc mogę poinformować użytkownika, że ​​obecny wybór jest pogrubienie lub cokolwiek .

Przykłady:

Hello <b>Stackover|flow</b> is cool! = Jesteś Wewnątrz b tagu

<i>Be|st place</i>! = Jesteś Wewnątrz i tagu

Hello <a href="http://stackoverflow.com/">Go|od stuff!</a> = Jesteś Wewnątrz a tag

Brak bibliotek zadowolić Chciałbym nauczyć się tej rzeczy :)

+0

Możliwa duplikat [to pytanie] (http: // stackoverflow.com/questions/263743/how-to-get-cursor-position-in-textarea) –

+0

@ Tyler Holien, nie mówię o pozycji opiekuna jako liczby, również chciałbym uzyskać jego nazwę węzła nadrzędnego , a rozwiązanie zaakceptowanych odpowiedzi działa tylko na tekstach. – Adam

+0

Prawda, przepraszam. Gdzie jest karetka, jeśli nie textarea? –

Odpowiedz

8

MSIE LTE 8: TextRange.parentElement()

Inne: DOMRange.commonAncestorContainer

<script type="text/javascript"> 
<!-- 
function fx() 
{ 

    var target=null; 
    if(window.getSelection) 
    { 
    target=window.getSelection().getRangeAt(0).commonAncestorContainer; 
    return((target.nodeType===1)?target:target.parentNode); 
    } 
    else if(document.selection) 
    { 
    var target=document.selection.createRange().parentElement(); 
    } 
    return target; 
} 
//--> 
</script> 
<input type="button" onclick="alert(fx().tagName)" value="click"> 
<div id="editor" contenteditable="true"> 
Hello <b>Stackoverflow</b> is cool! <i>Best place</i> 
Hello <a href="http://stackoverflow.com/">Good stuff!</a> 
</div> 
+0

Hi @ Dr.Molle, wiem o 'commonAncestorContainer', ale +1 dla' parentElement' :) Mój problem z 'commonAncestorContainer.nodeName' jest tym, że daje mi' # text' dla każdego rodzaju tekstu, więc jak mam pobrać z niego nazwę prawdziwego węzła macierzystego? :) – Adam

+0

Wybierz 'commonAncestorContainer.parentNode', jeśli' commonAncestorContainer.nodeType' nie jest 1 –

+0

Hmm Otrzymuję '# text' z Chrome (9.0.597.84), Safari (5.0.3), i nic z firefoxem i operą, IE untested : | – Adam

Powiązane problemy