I've tried 4 ways to clone the Selection object but it does not work.
The first 3 methods return a empty Object
.
document.onselectionchange = function() {
let selection = document.getSelection();
if( !selection.isCollapsed ) {
var clone1 = Object.assign({}, selection);
var clone2 = {
...selection
};
var clone3 = JSON.stringify(selection);
// This one trows a Error
// Uncaught DOMException: Failed to execute 'structuredClone' on 'Window': Selection object could not be cloned.
var clone4 = structuredClone(selection);
}
let {anchorNode, anchorOffset, focusNode, focusOffset} = selection;
// anchorNode and focusNode are text nodes usually
console.log("from.value", `${anchorNode["data"]}, offset ${anchorOffset}`)
console.log("fto.value", `${focusNode["data"]}, offset ${focusOffset}`)
}
It only works this way:
document.onselectionchange = function() {
let selection = document.getSelection();
if( !selection.isCollapsed ) {
var clone5 = {};
clone5.anchorNode = selection.anchorNode;
clone5.anchorOffset = selection.anchorOffset;
clone5.focusOffset = selection.focusOffset;
clone5.focusNode = selection.focusNode;
console.log("clone5", clone5);
}
let {anchorNode, anchorOffset, focusNode, focusOffset} = selection;
// anchorNode and focusNode are text nodes usually
console.log("from.value", `${anchorNode["data"]}, offset ${anchorOffset}`)
console.log("fto.value", `${focusNode["data"]}, offset ${focusOffset}`)
}