Ich bin ein einfacher und einfach zu bedienender Texteditor in Javascript, im Grunde ein WYSIWYG-Editor. Ich werde das contenteditable
Attribut zum Hauptwrapper benutzen (.wrapper
). Wenn Sie in das Feld .wrapper
drücken, wird ein neues <p>
Element mit einem eindeutigen id
an den Wrapper angehängt.Javascript - Get Element hinter caret in Kind Elemente von [contenteditable]
Ich brauche einen Weg, um das Kind-Element der .wrapper
, die gerade ausgewählt ist (d. H., Wird fokussiert oder mit der Caretze/Text-Marker innerhalb davon).
Ich habe Tage ohne Ergebnisse gesucht, und ich habe versucht, document.elementFromPoint()
, aber ohne ordnungsgemäße Ergebnisse.
Bei der Verwendung $(":focus")
, bekomme ich die gesamte .wrapper
und nicht das spezifische untergeordnete Element.
Edit:
Beispiel HTML-Struktur:
<div class="container t-wrapper" contenteditable>
</div>
Beispiel Javascript-Code:
$(document).ready(function() {
$currentElement = $("[contenteditable]");
$(".t-wrapper").each(function() {
var id = generateIdentifier(6); // Ignore this
/* This creates the initial <p> child element, where you start typing. */
$(this).html('<p class="t-empty t-first" id="' + id + '"></p>');
$(this).on("mouseup", function() {
/* $currentElement = whatever element the caret is inside. */
});
$(this).on("keyup", function() {
/* $currentElement = whatever element the caret is inside. */
});
));
});
Edit 2:
ich es geschafft, zu ge t es funktioniert ziemlich mit dem mouseup
Ereignis, da Sie tatsächlich auf etwas klicken. Aber ich brauche das, um den Caret mit der Tastatur zu bewegen. Alternativ benötige ich einen Weg, um die Position des Caret in Pixeln zu erhalten, und dann document.elementFromPoint()
zu verwenden, um das spezifische Element zu erhalten.
Haben Sie versucht contenteditable mit nur dem ausgewählten Knoten? Zum Beispiel könnten Sie das neue 'p' auf' contenteditable = "true" 'setzen, während Sie es für alle anderen Elemente deaktivieren. Beim Navigieren durch den Knotenbaum (Klick oder Pfeiltaste) können Sie die Eigenschaft 'contenteditable' auf das nächste Element verschieben. Dies scheint zumindest die Kindknoten mit ': focus' durchsuchbar zu machen. –
ein Stück Code, bitte? –
@ freestock.tk Einige grundlegende Beispielcode hinzugefügt. –