- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我的网站刷新时,我正在尝试通过 sessionStorage 显示 div filter-panel--content
的显示状态( block /无)。我在那个类(class)有多个 div。在该 div 中有一些复选框,它们在更改状态后刷新站点。这非常有效,但是当我的网站刷新时,这个 div 保持关闭状态 'display:none'。但是我尝试在sessionStorage中显示状态。
这是我侧边栏的截图:
<div class="filter-panel filter--property facet--property" data-filter-type="value-list" data-field-name="f">
<div class="filter-panel--flyout" style="border:none;">
<div id="label-it" class="label-it"><label class="filter-panel--title"><h3 class="rums">LED</h3><div id="klapp" class="klapp"></div></label></div>
<div class="filter-panel--content">
[...]
</div>
<div class="filter-panel filter--property facet--property" data-filter-type="value-list" data-field-name="f">
<div class="filter-panel--flyout" style="border:none;">
<div id="label-it" class="label-it"><label class="filter-panel--title"><h3 class="rums">Housing style</h3><div id="klapp" class="klapp"></div></label></div>
<div class="filter-panel--content">
[...]
</div>
当单击 div“label-it”时,div“filter-panel--content”切换 display:none
和 display:block
,在“filter”内-panel--content”是一些刷新网站的复选框。
此时我想存储“filter-panel--content”的显示属性
这是我获取sessionStorage
的第一个解决方案:
sessionStorage.setItem("filterstate", $(this).closest(".filter-panel--flyout").find(".filter-panel--content div").css("display"));
这是我第一个设置sessionStorage
的方案,在toggle函数中:
$('.label-it').click(function() {
$(this).find(".filter-panel--title div").toggleClass('klapp klappe');
$(this).closest(".filter-panel--flyout").find(".filter-panel--content div").toggle(350)
sessionStorage.setItem("filterstate", $(this).closest(".filter-panel--flyout").find(".filter-panel--content div").css("display"));
});
我需要一些帮助:)
第二次尝试:我试图实现 localStorage
不幸的是它不起作用..我真的需要一些帮助..
设置:
$('.label-it').click(function() {
$(this).find(".filter-panel--title div").toggleClass('klapp klappe');
$(this).closest(".filter-panel--flyout").find(".filter-panel--content div").toggle(350)
var panel = $(this).closest(".filter-panel--flyout").find(".filter-panel--content div");
if ( panel.style.display === "block") {
localStorage.setItem("isOpen", true);
} else {
localStorage.setItem("isOpen", false);
}
});
获取:
$(document).ready(function() {
var isOpen = localStorage.getItem("isOpen");
if (isOpen === "true") {
$(this).closest(".filter-panel--flyout").find(".filter-panel--content div").css('display', 'block');
} else {
$(this).closest(".filter-panel--flyout").find(".filter-panel--content div").css('display', 'none');
}
});
最佳答案
使用 sessionStorage.setItem("filterstate", $(this).closest(".filter-panel--flyout").find(".filter-panel--content div").css("display"));
您正在将 filterstate
设置为 display
值,例如 block
或 none
。
这本身不能做你想做的事。你必须知道你想将哪个元素设置为这个保存的显示状态。
For this you should better set an unique
id="[...]"
to each panel you would like to use for this and setting the selected ids into the storage. Then you could check yoursessionStorage
for the ids, search yourDOM
for its elements and toggle them.
此外,您的getting
是一种设置。要获得您必须在示例中使用的内容 sessionStorage.getItem('filterstate');
例如:
设置:sessionStorage.setItem("filterstate", $(this).closest(".filter-panel--flyout").find(".filter-panel--content div") .attr('id'));
获取:$('#' + sessionStorage.setItem('filterstate').css('display', 'block');
如您所说,您不能设置唯一 ID。这是一个使用 jQuerys .index() 的例子:
sessionStorage.setItem("filterstate", $(this).parent().index(this);
$('[ ... Parent ... ]').eq(sessionStorage.setItem('filterstate')).css('display', 'block');
(未测试)
The following is a tested example for somethinge where more than one panel could be open at the same time. (demo)
注意评论以了解更多信息:
$('.clickable').click(function() {
var panel = $(this).closest(".wrapper").find(".childToShow"); // get panel
panel.toggle(350, 'swing', function() { // toggle panel and execute function !!!after!!! toggle
var storage = localStorage.getItem('indexes'); // get localStorage
var index = $(this).parent().index(); // get index of childWrapper (parent of .clickable and .childToShow)
if ($(panel).css('display') === "block") { // check if panel is showen
storage = storage ? storage + ';' + index : index; // if panel is showen !!!add!!! its .wrappers index to the localStorage
// you should not overwirte the storage with the index, becaus more than one panel could be open at the same time.
} else { //if panel is closed remove index from localStorage
var newStorage = ''; // initialize new string for localStorage
var storageArr = storage.split(';'); // split actual storage string into an array
storageArr.splice(storageArr.indexOf(index), 1); // remove from storage array
for (var i = 0; i < storageArr.length; i++) {
newStorage = i === 0 ? newStorage + storageArr[i] : newStorage + ';' + storageArr[i]; // build new storage string
}
storage = newStorage; // set storage variable to the new one
}
localStorage.setItem('indexes', storage); // write into storage
});
});
$(document).ready(function() {
console.log('Your "indexes" storage looks like: ', localStorage.getItem("active2"))
var storage = localStorage.getItem("indexes") // get localStorage
if (storage) { // check if storage is not empty
storage = localStorage.getItem("indexes").split(';'); // get storage array
for (var i = 0; i < storage.length; i++) {
$('.wrapper').eq(storage[i]).find(".childToShow").css('display', 'block'); // show each saved wrappers (its index is in the storage) .childToShow
}
}
});
关于javascript - div 的 sessionStorage css 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58482991/
我一直在做一些关于 cookie、sessionStorage、localStorage 的研究,但对 $sessionStorage 的了解很少。 在开发者工具中哪里可以查看 $sessionSto
我正在尝试使用 sessionStorage 中的“isCollapse”变量来减少导航栏。通过单击该按钮,我的 sessionStorage 会发生变化,但渲染不会更新。 JSX Code {
我有一个单页 AngularJS 应用程序,并通过 websockets 不使用 cookie 来验证我的网站。这意味着刷新会使用户注销。将密码存储在 sessionStorage 上以便它们可以在
我在 ASP.NET MVC 应用程序的布局页面中有以下 JavaScript 代码,用于将用户的浏览器范围 ID 存储为 cookie,以便我可以访问服务器端 session 中相应用户的信息。
我不明白 sessionStorage 是如何工作的。我希望仅在初始页面加载时发生一个事件。 我(尝试)通过检查 session 是否是新的来做到这一点。想法如下: $(function() {
我有这段JS: $('.go-to-bag').click(function () { var productId = $(this).parent().attr('id'); var product
我有这样的代码: Some Some 1 Some 2 Some 3 Some 4
我有一个 javascript 函数,每当特定 select 发生更改时,就会进行 3 个 ajax Json 调用,并填充 3 个 sessionStorage 项,这些项用于创建动态下拉菜单。 /
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 Improve th
我有包含此函数和代码的 PHP 文件: var values7 = ; var value7 = new Array; var time
这是我的代码: sessionStorage.loggedIn = true; if (sessionStorage.loggedIn) { alert('true')
我想知道如何从我的自定义方法中访问 native sessionStorage 范围。 我的例子: https://jsfiddle.net/3mc7ao7j/1/ 在第 3 行,我希望能够在对数据执
我试图实现这段代码,但在我的控制台中它说 thing is null 这很奇怪,因为当我查看控制台时,sessionStorage 不是空的...... $(".btn-alert").click(f
根据我对 Web 存储的(贫乏)理解,sessionStorage 对象是按选项卡维护的,它在页面重新加载和页面导航后仍然存在,并且在选项卡关闭或浏览器进程终止时被销毁。 有没有办法监听 sessio
我正在使用 sessionStorage 来确保每个 session 只发生一次操作。但是,如果用户打开一个新窗口 - sessionStorage 不会转移到新窗口,并且会再次执行该操作。请参阅下面
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
在我的网络表单上,我使用 sessionStorage HTML5 的功能可以存储表单中的值,然后将它们显示在“谢谢”页面上,作为查询的确认收据。 我已成功存储除 之外的每种输入类型的值。元素。 我
我是 HTML5/Javascript 新手,我认为有一个概念问题。我使用 Aptana 作为我的环境,它使用 FireFox 进行浏览器调试。 这是有问题的代码: var req = new Con
在下面的示例中(在 jsfiddle 中,依赖于 requirejs),控制台第一次输出 theUsername 和 http://nothing&username=null ,然后如果您再次运行它,
Login.vue是我设置sessionStorage的地方 sessionStorage.setItem('accessToken', response.data.response.accessTo
我是一名优秀的程序员,十分优秀!