JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<textarea>1111111111111111
2222222222222222
333333333333333333333</textarea><br>
<button>&lt;</button>&nbsp;*&nbsp;<button>
&gt;
</button><br>
<button class="left">&lt;</button>&nbsp;[&nbsp;<button class="left">
&gt;
</button>
<button class="right">&lt;</button>&nbsp;]&nbsp;<button class="right">
&gt;
</button>

JavaScript

/**
     * работа с курсором. Работаем с первым элементом коллекции.
     * .carret('get')|| .carret() - выдать позицию курсора, верхняя граница отмеченного участка
     * .carret('sel') - выдать позицию курсора, верхняя и нижняя граница отмеченного участка в массиве
     * .carret('set',X,Y)|| carret(X,Y)|| carret(X) - установить курсор в поззицию
     * .carret('is',X) - проверить, что курсор в позиции X (отмеченая область считается курсором)
     * @param act
     * @param selectionStart
     * @param selectionEnd
     */
    $.fn.carret=function(act,selectionStart, selectionEnd){
        var input=this[0];
        if(!input) return 0 ;
        // анализ параметров
        if(undefined==act){
            act='get';
        } else if(typeof(act)=="number"){
            selectionEnd=selectionStart;
            selectionStart=act;
            act='set';
        } 
        if(undefined==selectionEnd)
            selectionEnd=selectionStart;
        if(act=='set'){
            if (input.setSelectionRange) {
                input.focus();
                input.setSelectionRange(selectionStart, selectionEnd);
            }
            else if (input.createTextRange) {
                var range = input.createTextRange();
                range.collapse(true);
                range.moveEnd('character', selectionEnd);
                range.moveStart('character', selectionStart);
                range.select();
            }
            return this;
        } else {
            $(input).focus();
            var cursor=[];
            if(typeof(input.selectionStart)!='undefined'){
                cursor=[ input.selectionStart,input.selectionEnd];
            } else
            if (document.selection) {
                for(var i=0;i<2;i++){
                    var sel=document.selection.createRange();
                    var clone=sel.duplicate();
                    sel.collapse(0==i);
                    clone.moveToElementText(input);
                   ...