I want to save (serialize) the Selection range in order to reuse (deserialize) it in the next user session in my UIWebView of iOS app.
Userpath:
My idea is firstly get the range by calling window.getSelection().getRangeAt(0) and then save its startContainer, endContainer properties. Check the following demo snippet:
function saveSelectedRange() {
var highlightRange = window.getSelection().getRangeAt(0);
var range = document.createRange();
// ???
console.log("start container: " + JSON.stringify(highlightRange.startContainer));
console.log("end container: " + JSON.stringify(highlightRange.endContainer));
}
#intro {
font-size: 125%;
color: green;
}
p.small {
font-size: 75%;
}
#content {
margin-left: 330px;
}
#buttons {
left: 10px;
position: fixed;
border: solid black 1px;
background-color: background:#C0ED72;
padding: 5px;
width: 300px;
}
html.ie6 #buttons {
position: absolute;
}
#buttons h3 {
font-size: 125%;
font-weight: bold;
margin: 0;
padding: 0.25em 0;
}
<div id="buttons">
<h3>Save selection range</h3>
<p>Make a selection in the document and use the button below to save the selection range </p>
<input type="button" ontouchstart="saveSelectedRange();" onclick="saveSelectedRange();" value="Save selection range">
</div>
<div id="content">
<h1>Demo</h1>
<p id="intro">
Please use your mouse to make selections from the sample content and use the button
on the left to save the selection range.
</p>
</div>
As you see, console logs empty startContainer, endContainer values, but startOffset, endOffset properties are ok. What values need I to save to be able to restore the selection range in further sessions? What are common ways to achieve it?
Ref: Range class, Selection class
You can also do it with JavaScript:
var range;
document.addEventListener("selectionchange", function() {
var selection = document.getSelection();
range = selection.getRangeAt(0);
});
function onClick() {
alert( range.toString() );
window.getSelection().removeAllRanges();
document.getSelection().addRange(range)
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With