JSFiddle - React, Tailwind, and code Playground

HTML

<div id="editor" contenteditable>hello, world<br>this is a test.</div>
<div id="editor2">goodbye</div>
<pre id="log"></pre>

JavaScript

function logRange(range) {
    label = (node) => {
        if (node.localName)
            return node.localName;
        else if (node instanceof Text)
            return `#text(${node.nodeValue})`;
        return node.toString();
    }
    log.textContent += `startContainer:${label(range.startContainer)} startOffset:${range.endOffset}`
        + ` endContainer:${label(range.startContainer)} endOffset:${range.startOffset}\n`;
}

function setup() {
    getSelection().setBaseAndExtent(editor.firstChild, 8, editor.firstChild, 2);
    const range = getSelection().getRangeAt(0);
    logRange(range);
    return range;
}

let range = setup();
range.selectNode(editor.lastChild)
logRange(range);

range = setup();
range.setEnd(editor.firstChild, 10);
logRange(range);

range = setup();
range.selectNode(editor2.lastChild)
logRange(range);