JSFiddle - React, Tailwind, and code Playground

by Artem

HTML

<span id="content" contenteditable>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent sit amet odio eu magna mattis vehicula. Duis egestas fermentum leo. Nunc eget dapibus eros, id egestas magna. Fusce non arcu non quam laoreet porttitor non non dui. Ut elit nisl, facilisis id hendrerit et, maximus at nunc. Fusce at consequat massa. Curabitur fermentum odio risus, vel egestas ligula rhoncus id. Nam pulvinar mollis consectetur. Aenean dictum ut tellus id fringilla. Maecenas rutrum ultrices leo, sed tincidunt massa tempus ac. Suspendisse potenti. Aenean eu tempus nisl. 
</span>
<br/><br/>
<button id="change_color">Change Selected Text Color</button>

CSS

::selection {
  background: transparent;
}

JavaScript

function changeSelectionColor() {
cosole.log(123);

  // Get Selection
  sel = window.getSelection();
  if (sel.rangeCount && sel.getRangeAt) {
    range = sel.getRangeAt(0);
  }
  // Set design mode to on
  document.designMode = "on";
  if (range) {
    sel.removeAllRanges();
    sel.addRange(range);
  }
  // Colorize text
  document.execCommand("hiliteColor", false, "red");
  // Set design mode to off
  document.designMode = "off";
}

document.getElementById("change_color").onclick = changeSelectionColor;

document.addEventListener('selectstart', function() {
  console.log('Selection started'); 
}, false);

document.addEventListener('selectionchange', function(e) {
  console.log('Selection changed ', e); 
}, false);