Sto costruendo un editor di testo semplice e intuitivo in Javascript, in pratica un editor WYSIWYG. Utilizzerò l'attributo contenteditable
nel wrapper principale (.wrapper
). Quando premi Invio all'interno di .wrapper
, un nuovo elemento <p>
con un id
univoco viene aggiunto al wrapper.Javascript - Ottieni elementi dietro il caret negli elementi figlio di [contenteditable]
Ho bisogno di un modo per recuperare quale elemento figlio di .wrapper
che è attualmente selezionato (vale a dire, essendo messo a fuoco o con l'indicatore di inserimento/testo all'interno di esso).
Ho cercato per giorni senza risultati e ho provato a utilizzare document.elementFromPoint()
ma senza risultati corretti.
Quando si utilizza $(":focus")
, ottengo l'intero .wrapper
e non l'elemento figlio specifico.
Edit:
Esempio HTML struttura:
<div class="container t-wrapper" contenteditable>
</div>
Esempio codice Javascript:
$(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:
sono riuscito a ge Funziona in modo equo con l'evento mouseup
, poiché in realtà stai facendo clic su qualcosa. Ma ho bisogno che funzioni per spostare il cursore usando la tastiera . In alternativa, ho bisogno di un modo per ottenere la posizione del cursore in pixel, e quindi utilizzare document.elementFromPoint()
per ottenere l'elemento specifico.
Hai provato a usare contenteditable solo sul nodo selezionato? Ad esempio, puoi impostare il nuovo 'p' a' contenteditable = "true" 'mentre disabilitarlo per tutti gli altri elementi. Durante la navigazione dell'albero dei nodi (clic o tasto freccia) è possibile spostare la proprietà 'contenteditable' sull'elemento successivo. Questo sembra rendere almeno i nodi figli ricercabili con ': focus'. –
un pezzo di codice, per favore? –
@ freestock.tk Aggiunto codice di esempio di base. –