JSFiddle - React, Tailwind, and code Playground

by Muzaffar Rasulov

HTML

<div id="root">
  <p>Выделение текста, текста выделение.</p>
  <p>#^#$^#}@</p>
</div>

JavaScript

//'use strict'
document.addEventListener('selectend', function() {
  alert(window.getSelection().toString());
})

//Создаем событие 'selectionend'
;
(function() {
  if (!window.getSelection) {
    return;
  }

  var event = document.createEvent('Event'); //Старым способом, что бы в ИЕ работало
  event.initEvent('selectend', true, true);

  var selectstart = false;
  document.addEventListener('selectstart', function() {
    selectstart = true;
  })

  //Выделение мышей
  document.addEventListener('mouseup', function() {
      raiseEvent();
  })
  //Комбинацией ctrl+a
  document.addEventListener('keyup', function() {
    raiseEvent();
  })

  //Проводим проверку, и вызываем событие
  function raiseEvent() {
    if (window.getSelection().toString().length && selectstart) {
      selectstart = false;
      document.dispatchEvent(event);
    }
  }
}());