页面选中文字存入localstorge中,刷新页面后,如何在div中搜索存的文字,然后滚动到文字所在区域呢?
```html
<html>
<head>
<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>
</head>
<body>
<div class="article">
<p>帝高阳之苗裔兮,朕皇考曰伯庸。摄提贞于孟陬兮,惟庚寅吾以降。</p>
<span>皇览揆余初度兮,肇锡余以嘉名。名余曰正则兮,字余曰灵均。纷吾既有此内美兮,又重之以修能。</span><br>
<span>扈江离与辟芷兮,纫秋兰以为佩。汩余若将不及兮,恐年岁之不吾与。朝搴阰之木兰兮,夕揽洲之宿莽。日月忽其不淹兮,春与秋其代序。</span><br>
<span>惟草木之零落兮,恐美人之迟暮。不抚壮而弃秽兮,何不改乎此度?乘骐骥以驰骋兮,来吾道夫先路!昔三后之纯粹兮,固众芳之所在。</span>
</div>
<button id="cun">存文字</button>
<button id="du">读文字</button>
<script>
$('.article').mouseup(function(){
text = window.getSelection?window.getSelection().toString():document.selection.createRange().text;
if(text !=""){
$('#cun').click(function(){
localStorage.setItem("textjl", text));
});
}
});
</script>
</body>
</html>
```
JS localstorage存储window.getSelection()结果 并再次使用
你题目的解答代码如下:
<html>
<head>
<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>
<script type="text/javascript" src="http://libs.baidu.com/jquery/1.11.1/jquery.min.js"></script>
</head>
<body>
<div style="height: 2000px; width: 500px;background-color: #999;"></div>
<div class="article">
<p>帝高阳之苗裔兮,朕皇考曰伯庸。摄提贞于孟陬兮,惟庚寅吾以降。</p>
<span>皇览揆余初度兮,肇锡余以嘉名。名余曰正则兮,字余曰灵均。纷吾既有此内美兮,又重之以修能。</span><br>
<span>扈江离与辟芷兮,纫秋兰以为佩。汩余若将不及兮,恐年岁之不吾与。朝搴阰之木兰兮,夕揽洲之宿莽。日月忽其不淹兮,春与秋其代序。</span><br>
<span>惟草木之零落兮,恐美人之迟暮。不抚壮而弃秽兮,何不改乎此度?乘骐骥以驰骋兮,来吾道夫先路!昔三后之纯粹兮,固众芳之所在。</span>
</div>
<button id="cun">存文字</button>
<button id="du">读文字</button>
<div style="height: 2000px; width: 500px;background-color: #999;"></div>
<script>
var range;
$('.article').mouseup(function(){
const sel = window.getSelection()
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0)
}
});
// 保存光标位置
$('#cun').click(function(){
if (range) {
let startNode = range.startContainer;
let endNode = range.endContainer;
if (startNode.nodeType == 3) {
var startIsText = true;
var startFlag = startNode.parentNode;
startNode = startNode.nodeValue;
} else {
var startIsText = false;
var startFlag = startNode;
}
if (endNode.nodeType == 3) {
var endIsText = true;
var endFlag = endNode.parentNode;
endNode = endNode.nodeValue;
} else {
var endIsText = false;
var endFlag = endNode;
}
let startOffset = range.startOffset;
let endOffset = range.endOffset;
let startTagName = startFlag.nodeName;
let startHTML = startFlag.innerHTML;
let endTagName = endFlag.nodeName;
let endHTML = endFlag.innerHTML;
//you can store this in database and use it
let rInfo = {
startNode: startNode,
startOffset: startOffset,
startIsText: startIsText,
startTagName: startTagName,
startHTML: startHTML,
endNode: endNode,
endOffset: endOffset,
endIsText: endIsText,
endTagName: endTagName,
endHTML: endHTML
};
window.localStorage.setItem("r", JSON.stringify(rInfo));
}
});
// 重置光标位置
$('#du').click(function(){
let a = window.localStorage.getItem("r");
use(JSON.parse(a));
});
$(window).load(function(){
let a = window.localStorage.getItem("r");
use(JSON.parse(a));
});
function findEle(tagName, innerHTML) {
let list = document.getElementsByTagName(tagName);
for (let i = 0; i < list.length; i++) {
if (list[i].innerHTML == innerHTML) {
return list[i];
}
}
}
function show(startNode,startIsText,startOffset,
endNode,endIsText,endOffset,sP,eP) {
var s, e;
if (startIsText) {
let childs = sP.childNodes;
console.log(childs);
for (let i = 0; i < childs.length; i++) {
console.log(childs[i].nodeValue);
console.log(startNode);
if (childs[i].nodeType == 3 && childs[i].nodeValue == startNode)
s = childs[i];
console.log(s);
}
} else {
s = startNode;
}
if (endIsText) {
let childs = eP.childNodes;
console.log(childs);
for (let i = 0; i < childs.length; i++) {
if (childs[i].nodeType == 3 && childs[i].nodeValue == endNode)
e = childs[i];
console.log(e);
}
} else {
e = startNode;
}
let range = document.createRange();
range.setStart(s, startOffset);
range.setEnd(e, endOffset);
let sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
//滚动条滚动到指定元素
var top = $(s).parent().offset().top;
console.log(top);
setTimeout(function(){
$(window).scrollTop(top-100);
},100);
}
function use(obj) {
if(!obj)
return;
let sP = findEle(obj.startTagName, obj.startHTML);
let eP = findEle(obj.endTagName, obj.endHTML);
show(
obj.startNode,
obj.startIsText,
obj.startOffset,
obj.endNode,
obj.endIsText,
obj.endOffset,
sP,
eP
);
}
</script>
</body>
</html>
window.onload = () => {
var children = document.querySelector('.article').children;
var textjl = localStorage.getItem("textjl");
for (let index = 0; index < children.length; index++) {
const element = children[index];
let text = element.innerText;
if(text.indexOf(textjl) >= 0) {
element.scrollIntoView(false);
break;
}
}
}