JSFiddle - React, Tailwind, and code Playground

HTML

<textarea id="input"></textarea>
<input type="button" value="button" onclick="storeSelection();" />
<div></div>

JavaScript

function storeSelection() {
    var el = $("#input")[0];
    var sel = GetRangeSelection(el);
    alert("check" + sel.start + ", " + sel.end);
}
function alerta(msg) {
    $('div').append("<br /><br />"+msg);
}
function GetRangeSelection(el) {
    var start = 0, end = 0, selectedText = '', normalizedValue, range,
        textInputRange, len, endRange;

    if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") {
        start = el.selectionStart;
        end = el.selectionEnd;
    } else {
        el.focus();
        range = document.selection.createRange();

        if (range && range.parentElement() == el) {
            len = el.value.length;
            normalizedValue = el.value.replace(/\r\n/g, "\n");
            alerta('bk:' + range.getBookmark());
            // Create a working TextRange that lives only in the input
            textInputRange = el.createTextRange();
            textInputRange.moveToBookmark(range.getBookmark());

            // Check if the start and end of the selection are at the very end
            // of the input, since moveStart/moveEnd doesn't return what we want
            // in those cases
            endRange = el.createTextRange();
            endRange.collapse(false);
            alerta('rng s:'+textInputRange.compareEndPoints("StartToEnd", endRange));
            if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
                alerta('1');
                start = end = len;
            } else {
                alerta('2');
                start = -textInputRange.moveStart("character", -len);
                alerta('st:' + start);
                start += normalizedValue.slice(0, start).split("\n").length - 1;

                alerta('rng e:' + textInputRange.compareEndPoints("EndToEnd", endRange));
                if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) {
                    alerta('3');
                    end = len;
                } else {
               ...