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);