J'ai un div qui fait office d'éditeur WYSIWYG. Il agit comme une zone de texte mais y restitue la syntaxe Markdown pour afficher les modifications en direct.
Problème : Lors de la saisie de lettres, la position du curseur est réinitialisée au début du div.
const editor = document.querySelector('div'); editor.innerHTML = parse('**dlob** *cilati*'); editor.addEventLis tener('input', () => { editor.innerHTML = parse(editor.innerText); }); function parse(text) { return text .replace(/**(.*)**/gm, '**<strong></strong>**') // bold .replace(/*(.*)*/gm, '*<em></em>*'); // italic }
div { height: 100vh; width: 100vw; }
<div contenteditable />
Codepen : https://codepen.io/ADAMJR/pen/MWvPebK
Les éditeurs Markdown comme QuillJS semblent être capables de modifier les éléments enfants sans modifier l'élément parent. Cela évite le problème, mais je sais maintenant comment recréer cette logique avec cette configuration.
Question : Comment empêcher la réinitialisation de la position du curseur lors de la frappe ?
Mise à jour : J'ai réussi à envoyer la position du curseur à la fin du div sur chaque entrée. Cependant, cela réinitialise essentiellement la position. https://codepen.io/ADAMJR/pen/KKvGNbY
La plupart des éditeurs de texte enrichi conservent leur propre état interne, le mettent à jour en fonction des événements clés et restituent une couche visuelle personnalisée. Par exemple :
Vous devez d'abord obtenir la position du curseur, puis traiter et définir le contenu. Restaurez ensuite la position du curseur.
Restaurer la position du curseur est la partie la plus délicate lorsqu'il y a des éléments imbriqués. De plus, vous créerez de nouveaux éléments
和
à chaque fois et les anciens seront supprimés.