gpt4 book ai didi

javascript - 如何在 javascript 中保存和恢复选择范围?

转载 作者:搜寻专家 更新时间:2023-10-31 21:46:17 25 4
gpt4 key购买 nike

我想保存(序列化)Selection 范围,以便在 iOS app< 的 UIWebView 的下一个用户 session 中重用(反序列化)它/强>。

用户路径:

  1. 用户选中部分文本,点击保存
  2. 关闭内置的移动浏览器
  3. 打开内置的移动浏览器并查看恢复的选择。

我的想法是先通过调用window.getSelection().getRangeAt(0)获取范围,然后保存它的startContainerendContainer特性。检查以下演示片段:

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>

如您所见,控制台记录了空的 startContainerendContainer 值,但是 startOffsetendOffset 属性正常.我需要保存哪些值才能在以后的 session 中恢复选择范围?常见的实现方式有哪些?

引用: Range class , Selection class

最佳答案

我终于通过使用@TimDown rangy-library 和他的 module 解决了这个问题.

var highlightRange = window.getSelection().getRangeAt(0);
var serializedRange = rangy.serializeRange(highlightRange);
var deseriazedRange = rangy.deserializeRange(serializedRange);

重要说明:Rangy 库创建自己的 RangyRange 类以便跨平台(我猜),如果您想使用 DOM Range 中的方法 类,其中一些将不可用,直到您将 rangy 设置为使用 Native Range

关于javascript - 如何在 javascript 中保存和恢复选择范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39566611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com