Tengo un botón de marca en la interfaz de usuario, haciendo clic en el cual, cualquier selección de usuario se marca en rojo. No hay problemas aquí. Lo logro pordocument.execCommand("insertHTML")
Pero tengo un requisito adicional de que si se crea la nueva selección, que es la intersección de las marcas de las selecciones antiguas, la marca roja de la selección anterior debería desaparecer.
Como ejemplo:
En la siguiente imagen: esta y las pruebas están marcadas. Ahora, si selecciono sus pruebas desde el principio y hago clic en la marca, las marcas antiguas de esto y las pruebas deberían desaparecer y solo su prueba debería marcarse porque hay una intersección.
código:
const button = document.getElementById("button");
button.addEventListener('click', ()=>{
const s = window.getSelection();
const selectionStr = s.toString();
document.execCommand("insertHTML", false, `<span class="bg-red">${selectionStr}<span>`);
})
.bg-red {
background: red;
}
<div contenteditable="true">
this is testing this is testing this is testing
</div>
<button id="button">mark</button>
fuente