div的sessionStorage css属性

约翰·杜

我正在尝试filter-panel--content刷新站点时显示的div的显示状态(阻止/无显示)我在那个班上有多个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,它在切换功能中:

$('.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"));filterstatedisplay设置blocknone

这本身无法做您想做的。您必须知道要设置为此保存显示状态的夹心元素。

为此,您最好id="[...]"为每个要使用的面板设置一个唯一的名称,并将选定的ID设置到存储中。然后,您可以检查sessionStorageID,搜索DOM其元素并进行切换。

此外,您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');

(未测试)


以下是经过测试的示例,可以同时打开多个面板。演示

请注意评论以了解更多信息:

$('.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
    }
  }
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章