JSFiddle - React, Tailwind, and code Playground

HTML

<p>Das hier ist ein langer Text, in dem auch ab und zu <strong>kursiv</strong> geschrieben wird.<br>
<strong>Hier</strong> und <strong>dort</strong> auch mal mit vielen kursiven Wörtern hintereinander.<br>
Dann kommt noch ein weiter Absatz der auch vielleicht <strong>kursive</strong> Elstrongents hat.<br>
Oder auch mal ohne kursives Zeug.</p>

<output></output>

CSS

output {
    font-weight: bolder;
    font-size: 1.5em;
    color: Crimson;
}

JavaScript

var WordUnderCursor = {
   getFullWord : function(event) {
      var i, begin, end, range, textNode, offset;
      // Internet Explorer
      if (document.body.createTextRange) {
         try {
            range = document.body.createTextRange();
            range.moveToPoint(event.clientX, event.clientY);
            range.select();
            range = WordUnderCursor.getTextRangeBoundaryPosition(range, true);
            textNode = range.node;
            offset = range.offset;
         } catch (e) {
            return ''; // Sigh, IE
         }
      }
      // Firefox, Safari
      else if (document.caretPositionFromPoint) {
         range = document.caretPositionFromPoint(event.clientX, event.clientY);
         textNode = range.offsetNode;
         offset = range.offset;
      }
      // Chrome
      else if (document.caretRangeFromPoint) {
         range = document.caretRangeFromPoint(event.clientX, event.clientY);
         textNode = range.startContainer;
         offset = range.startOffset;
      }
      if (!textNode || textNode.nodeType !== Node.TEXT_NODE) {return ''}
      var data = textNode.textContent;
      if (offset >= data.length) {offset = data.length - 1}
      if (WordUnderCursor.isW(data[offset])) {return ''}
      i = begin = end = offset;
      while (i > 0 && !WordUnderCursor.isW(data[i - 1])) {i--}
      begin = i;
      i = offset;
      while (i < data.length - 1 && !WordUnderCursor.isW(data[i + 1])) {i++}
      end = i;
      var word = data.substring(begin, end + 1);
      if (end === data.length - 1 || begin === 0) {
         var nextNode = WordUnderCursor.getNextNode(textNode),
         prevNode = WordUnderCursor.getPrevNode(textNode);
         if (end == data.length - 1 && nextNode) {
            var nextText = nextNode.textContent;
            i = 0;
            while (i < nextText.length && !WordUnderCursor.isW(nextText[i])) {word += nextText[i++]}
         }
         else if (begin === 0 && prevNode) {
            var prevText...