JSFiddle - React, Tailwind, and code Playground

HTML

<p contenteditable = "true" >Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse dui turpis, pretium non cursus ut, venenatis ac arcu. Integer interdum velit et arcu aliquam euismod. Phasellus a mi ac nulla sagittis fringilla. Vivamus vitae odio lectus. Nulla mattis venenatis volutpat. Etiam magna tellus, ullamcorper vel tristique eu, molestie at mauris. Nulla pharetra odio vel ante eleifend volutpat adipiscing mauris ullamcorper. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin consequat hendrerit posuere. Curabitur adipiscing semper elit, ut tempus tortor varius a.</p>
<img src="https://www.google.com/images/srpr/logo4w.png" />
<p contenteditable = "true" >Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse dui turpis, pretium non cursus ut, venenatis ac arcu. Integer interdum velit et arcu aliquam euismod. Phasellus a mi ac nulla sagittis fringilla. Vivamus vitae odio lectus. Nulla mattis venenatis volutpat. Etiam magna tellus, ullamcorper vel tristique eu, molestie at mauris. Nulla pharetra odio vel ante eleifend volutpat adipiscing mauris ullamcorper. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin consequat hendrerit posuere. Curabitur adipiscing semper elit, ut tempus tortor varius a.</p>
<p contenteditable = "true" >Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse dui turpis, pretium non cursus ut, venenatis ac arcu. Integer interdum velit et arcu aliquam euismod. Phasellus a mi ac nulla sagittis fringilla. Vivamus vitae odio lectus. Nulla mattis venenatis volutpat. Etiam magna tellus, ullamcorper vel tristique eu, molestie at mauris. Nulla pharetra odio vel ante eleifend volutpat adipiscing mauris ullamcorper. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin consequat hendrerit posuere. Curabitur adipiscing semper elit, ut tempus tortor varius a.</p>

CSS

p {border: solid 1px red}

JavaScript

var setSelectionRange = function(element, start, end) {
    var rng = document.createRange(),
        sel = getSelection(),
        n, o = 0,
        tw = document.createTreeWalker(element, NodeFilter.SHOW_TEXT, null, null);
    while (n = tw.nextNode()) {
        o += n.nodeValue.length;
        if (o > start) {
            rng.setStart(n, n.nodeValue.length + start - o);
            start = Infinity;
        }
        if (o >= end) {
            rng.setEnd(n, n.nodeValue.length + end - o);
            break;
        }
    }
    sel.removeAllRanges();
    sel.addRange(rng);
};

var setCaret = function(element, index) {
    setSelectionRange(element, index, index);
};

function cursorIndex() {
    return window.getSelection().getRangeAt(0).startOffset;
}

$(document).on('keydown', 'p[contenteditable="true"]', function(e) {
    if(e.which == 38) { 
        
        e.preventDefault();
		var prev = $(this).prev('p');
		prev.focus();
        var prevText = prev.text();
        setCaret(prev.get(0), prevText.length);
        
    };
});