si el texto es sure :f , range.deleteContents() suponga que debe eliminar :f , pero está eliminando :f . Parece espacio antes : el personaje también se está eliminando.
Cómo conservar el espacio antes : ? Alternativamente, ¿hay alguna otra forma de eliminar texto que sea más confiable?
const selection = window.getSelection(); const range = document.createRange(); range.setStart(selection.focusNode, 5); // start of : range.setEnd(selection.focusNode, 7); range.deleteContents(); //deletes ` :f` No importa si configuro range.setStart(selection.focusNode, 4) o range.setStart(selection.focusNode, 5) ... se elimina el espacio.
Aquí está el violín para jugar: https://jsfiddle.net/JerryGoyal/o2c9f5gw/