Moja markup dla elementu Contenteditable jest jak poniżej:

<iframe class="rich_text">
<html style="background:none transparent;">
    <head></head>
    <body contenteditable="true"></body>
</html>
</iframe>

Czy istnieje zdarzenie o zmianie selekcji dla ciała (Contenteditable)? Więc mogę wykryć, czy wybrany blok tekstowy ma pogrubienie / podkreślenie itp.

Próbowałem niektórych obsługi imprez (jQuery), ale bez powodzenia:

var richText = $(".rich_text"),
richTextDoc = richText.contents()[0],
richTextBody = richText.contents().find("body");

// Enable Design mode.
richTextDoc.open();
richTextDoc.write("");
richTextDoc.close();
richTextDoc.designMode = "on";

// Binds selection change event
$(richTextDoc).bind("select", function() { ... });
$(richTextDoc).bind("selectstart", function() { ... });
richTextBody .bind("select", function() { ... });
richTextBody .bind("selectstart", function() { ... });
6
Yong Fei 9 grudzień 2011, 11:05

3 odpowiedzi

Najlepsza odpowiedź

Zakładając, że treść Twojego IFrame serwowane jest z tej samej domeny, której możesz użyć:

$('.rich_text').contents()
  .find('body')
  .bind('selectstart', function(){});

Jak możesz zobacz stąd zdarzenie SelectStart jest prawidłowo zwolnione po wybraniu elementu.

5
mamoo 9 grudzień 2011, 07:34

Nie ma przejścia do przeglądarki do wykrywania zmian w wyborze. IE i na przykład niedawne przeglądarki Webkit (Chrome i Safari) obsługują zdarzenie selectionchange na dokumencie. Firefox i Opera nie mają takiego wydarzenia, a wszystko, co możesz zrobić, to wykrywać zmiany wyboru wykonane za pomocą zdarzeń klawiatury i myszy, co jest niezadowalające (nie ma sposobu wykrywania "Wybierz wszystkie" z kontekstu lub edycji menu, na przykład).

Aktualizacja 2017: Jest teraz sposób przeglądarki. Ostatnie przeglądarki WebKit / Blink (Chrome, Safari, Opera) SuperShange i Firefox obsługuje go od wersji 43.

6
Smile4ever 27 listopad 2017, 20:58

Dla Firefoksa, https://developer.mozilla.org/ZH-CN/DOCS/ Xpcom_interface_reference / nsieditor oferuje obserwator na redaktorach. Zakładając, że "przywileje" są potrzebne jako XPCOM. Inny zol. Na Firefoksie obok myszy & amp; KBD-Tracking:

Na "Focus" i "Blur" - Wydarzenia wszystkich / dotyczących węzłów / elementów (tekst?) Porównaj zawartość węzła między stanem w zdarzeniu ostrości a zawartością węzła na zdarzeniu rozmycia (= urlop, również, jeśli okno- Zamknij lub SOP'n Podobne), i ustawić lub "_moz_dirty", brudny atrybut (s. W zależności od tego, do kogo / jakiej przeglądarki powinny służyć, wykonaj również wiele różnych brudnych atryb).

1
dos 27 sierpień 2013, 00:30