Quando si preme Invio su un elemento contentEditable
, ogni browser gestisce il codice risultante in modo diverso: Firefox inserisce un tag BR, Chrome inserisce un tag DIV Internet Explorer inserisce un tag P.Modo cross-browser per inserire il tag BR o P quando si preme Invio su un contenutoElemento modificabile
stavo disperatamente cercando una soluzione ad almeno usare un BR o P per tutti i browser e la risposta più comune è stata questa:
inserendo tag BR:
$("#editableElement").on("keypress", function(e){
if (e.which == 13) {
if (window.getSelection) {
var selection = window.getSelection(),
range = selection.getRangeAt(0),
br = document.createElement("br");
range.deleteContents();
range.insertNode(br);
range.setStartAfter(br);
range.setEndAfter(br);
selection.removeAllRanges();
selection.addRange(range);
return false;
}
}
});
Ma questo non funziona perché sembra che i browser non sappiano come impostare il punto di inserimento dopo <br>
il che significa che il seguente è che non sta facendo nulla di utile (specialmente se premi Invio quando il cursore è inserito Ed alla fine del testo):
range.setStartAfter(br);
range.setEndAfter(br);
Qualcuno direbbe: utilizzare il doppio <br><br>
ma questo si traduce in due interruzioni di riga quando si colpisce entrare all'interno di un nodo di testo.
Altri direbbero sempre aggiungere un ulteriore <br>
alla fine di contentEditable, ma se si dispone di un <div contenteditable><p>text here</p></div>
e si posiziona il cursore alla fine del testo, quindi premere Invio, si otterrà il comportamento sbagliato.
così ho detto a me stesso forse possiamo usare P invece di BR, e la risposta comune è:
inserimento di tag P:
document.execCommand('formatBlock', false, 'p');
Ma questo non funziona in modo coerente o.
Come potete vedere, tutte queste soluzioni lasciano a desiderare. C'è un'altra soluzione che risolve questo problema?
io ti senti ... sto affrontando lo stesso problema fastidioso :) – Swag