javascript - JavaScript中页面加载时如何使用localStorage防止树形视图崩溃
问题描述
我想使用 localStorage 来防止在 JavaScript 中加载页面时树视图的崩溃。我试图通过以下方式做到这一点 - 但它没有成功。那么我该如何解决这个问题呢?->
{{#each menu}}
<ul id="myUL">
<div class="menu-text">
<li>
<span class="caret treeparent ripple">Data<i class="fas fa-chevron-down arrow"></i></span>
<ul class="nested nav nav-pills flex-column tog">
{{#each this}}
<li rel="{{@index}}" class="nav-item">
<a href="/page">Data</a>
</li>
{{/each}}
</ul>
</li>
</div>
</ul>
{{/each}}
Javascript:
$("#myUL ul.tog li a").click( function() {
var value = $(this).parent("li").attr("rel");
$("#myUL ul.main li").removeClass("highlight");
$(this).parent("li").addClass("highlight");
localStorage.setItem('pms' , JSON.stringify(value));
console.log('Stored menu: ' + value);
});
var retrievedObject = JSON.parse(localStorage.getItem('pms'));
if(retrievedObject) {
$("#myUL ul.tog li[rel=" + retrievedObject + "] ul").slideToggle();
$("#myUL ul.tog li").removeClass("highlight");
$("#myUL ul.tog li").find("span.current-page").remove();
$("#myUL ul.tog li[rel=" + retrievedObject + "]").addClass("highlight").append("<span class=\"current-page\"></span>");
$("#myUL ul.tog li li").removeClass("highlight");
$("#myUL ul.tog li li").find("span.current-page").remove();
}
现场重现问题-->
解决方案
<ul id="myUL">
<div class="menu-text">
<li>
<span class="caret treeparent ripple">Menu 1<i class="fas fa-chevron-down arrow"></i></span>
<ul class="nested nav nav-pills flex-column tog">
<li class="nav-item" data-rel="data-rel">
<a class="nav-link" href="javascript:window.location.reload(true)">Sub 1</a>
</li>
<li class="nav-item">
<a class="nav-link" href="javascript:window.location.reload(true">Sub 2</a>
</li>
</ul>
</li>
<li>
<span class="caret treeparent ripple">Menu 2<i class="fas fa-chevron-down arrow"></i></span>
<ul class="nested nav nav-pills flex-column tog">
<li class="nav-item">
<a class="nav-link" href="javascript:window.location.reload(true)">Sub 1</a>
</li>
</ul>
</li>
</div>
</ul>
var openedTreeLiIndex = JSON.parse(localStorage.getItem('openedTreeLiIndex')) || [];
restoreOpenedTreeIndex();
$(".treeparent").click(function () {
var $tog = $(this).next('.tog');
$tog.slideToggle();
if ($tog.hasClass('open')){
$tog.removeClass('open');
}else{
$tog.addClass('open');
}
$(".arrow", this).toggleClass('flip');
storeOpenTreeIndex();
});
function storeOpenTreeIndex() {
var liItems = $('.menu-text > li');
var counter = liItems.length;
$(liItems).each(function (index, li) {
var nestedUl = $(li).find('ul.open');
if (nestedUl.length > 0) {
if (openedTreeLiIndex.indexOf(index) === -1) {
openedTreeLiIndex.push(index);
}
} else {
openedTreeLiIndex = openedTreeLiIndex.filter(function (item) { return item !== index; });
}
if (!--counter){
localStorage.setItem('openedTreeLiIndex', JSON.stringify(openedTreeLiIndex));
}
});
}
function restoreOpenedTreeIndex() {
var liItems = $('.menu-text > li');
var counter = liItems.length;
$(liItems).each(function (index, li) {
if (openedTreeLiIndex.indexOf(index) !== -1) {
$(li).find('ul').addClass('open').css({ display: 'block' });
}
});
}
推荐阅读
- javascript - 如何解释我收到的以下错误?
- php - PHP e.preventDefault 导致 isset($_POST['submit']) 为假,$img['name'] 为空
- google-cloud-dataflow - Beam/Dataflow:了解为什么批处理作业在 Stateful Pardo 步骤之前停止
- sql - SQL (Redshift) - 查找连续数字
- python-3.x - 关于发现错误的问题。此 python3 脚本中的以下错误是什么?
- r - 使用用户代理进行 Web Scraping 以避免被网站阻止
- r - R中的数据匿名化
- python - 如何对一段数据进行加权?
- php - Nginx PHP-FPM 在 Docker 中从 127.0.0.1 淹没日志
- python - 有没有办法在 Python 的 ODEINT 中更改我的 ODE?