2011-07-19 16 views
9

Biorąc pod uwagę ten kod HTML:Jak wykryć, kiedy element potomny edytowalnego treści DIV jest edytowany za pomocą klawiatury?

<div contenteditable> 
    .... 
    <span> child-element </span> 
    .... 
</div> 

Gdy użytkownik kliknie na elemencie SPAN (w celu umieszczenia daszka wewnątrz niego), a następnie naciska klawisz na klawiaturze znaków (w celu edycji tekstowych kierujących zawartość elementu SPAN), zdarzenie zostanie wywołane.

Jednak właściwość odpowiednich obiektów zdarzeń to nie element SPAN, ale sam element DIV.

żywo demo:http://jsfiddle.net/UKcMa/

Jak mogę określić, czy klucz zdarzenie miało miejsce wewnątrz elementu SPAN?

Odpowiedz

10

Można to zrobić za pomocą API wyboru:

$('div').keydown(function(e) { 
    if (document.selection) { 
     alert(document.selection.createRange().parentElement().tagName); // IE 
    } else { 
     // everyone else 
     alert(window.getSelection().anchorNode.parentNode.tagName); 
    } 
}); 

Uwaga: Powyższy przykład jest uproszczone. Zapoznaj się z zamieszczonym poniżej opisem SO, aby uzyskać kompletne rozwiązanie problemu selekcji.

Demo:

Odniesienia:

+0

Dzięki, jestem pewien, że jest analogiczny sposób na zrobienie tego w IE ... –

+0

@ Šime - Zaktualizowano rozwiązaniem IE. Znalazłem połączony wpis podczas badania tego. Tam są pełniejsze odpowiedzi. –

+0

To rozwiązało mój problem. Dziękuję bardzo ':)' –

1

Tworzenie całości div do edycji oznacza, że ​​znacznik <span> to nic innego jak treść tekstowa. Jeśli chcesz tylko, aby span był edytowalny, ustaw contentEditable na samym zakresie.

+0

Potrzebuję, aby cały DIV był edytowalny. Używam elementów SPAN, aby nadać określonym słowom określoną stylizację i zachowanie ... –

Powiązane problemy