首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本地存储问题

本地存储问题
EN

Stack Overflow用户
提问于 2020-01-05 02:38:24
回答 1查看 49关注 0票数 0

我正在尝试使用本地存储,以便我的邀请在刷新时留在页面上。我该如何将其实现到我的代码中呢?我真的不知道从哪里开始,我真的很挣扎。请告诉我如何在我的代码中实现这个。我一直在创建子元素,并将它们附加到HTML中的UL。

代码语言:javascript
复制
const form = document.getElementById("registrar");
const input = form.querySelector("input");
const mainDiv = document.querySelector(".main");
const ul = document.getElementById("invitedList"); 

const div = document.createElement('div');
const filterLabel = document.createElement('label');
const filterCheckBox = document.createElement('input'); 

filterLabel.textContent = "Hide those who havent responded";
filterCheckBox.type = 'checkbox';
div.appendChild(filterLabel);
div.appendChild(filterCheckBox);
mainDiv.insertBefore(div, ul);


/*
This creates a checkbox to see you has confirmed if they are coming
to the event or not.
*/

filterCheckBox.addEventListener("change", (e) => {
  const isChecked = e.target.checked;
  const lis = ul.children;
      if (isChecked) {
            for (let i = 0; i < lis.length; i += 1) {
            let li = lis[i]
            if (li.className === 'responded') {
             li.style.display = '';
            } else {
             li.style.display = 'none';
            }
          }
      } else {
          for (let i = 0; i < lis.length; i += 1) {
          let li = lis[i]
          li.style.display = '';
          }    
      }
});


/*
This function creates new list items (the invites). 
*/

createLi = (text) => {

  createElement = (elementName, property, value) => {

  const element = document.createElement(elementName);
  element[property] = value;
  return element;
  }

  appendElement = (elementName, property, value) => {
  const element = createElement(elementName, property, value);
  li.appendChild(element);
  return element;
  }

    const li = document.createElement("li");
    appendElement("span", "textContent", text);
    appendElement("label", "textContent", "Confirmed")
    .appendChild(createElement("input", "type", "checkbox"));
    appendElement("button", "textContent", "edit");
    appendElement("button", "textContent", "remove");
    return li;

}   


}

form.addEventListener("submit", (event) => {
    event.preventDefault();
    const text = input.value;
    input.value = "";
    const li = createLi(text);     
    ul.appendChild(li);
});

ul.addEventListener("change", () => {
   const checkbox = event.target;
   const checked = checkbox.checked;
   const listItem = checkbox.parentNode.parentNode;

 if (checked) {
   listItem.className = "responded";
} else {
   listItem.className = "";
}                    
});


          ul.addEventListener("click", (e) => {
          if (e.target.tagName === 'BUTTON') {

          const button = e.target;
          const li = button.parentNode;
          const ul = li.parentNode;
          const action = button.textContent;
          const nameActions = {
              remove: () => { 
                      ul.removeChild(li);
          },
              edit: () => {
                      const span = li.firstElementChild;
                      const input = document.createElement('input');
                      input.type = 'text';
                      input.value = span.textContent;
                      li.insertBefore(input, span);
                      li.removeChild(span);
                      button.textContent = 'Save'; 
          },
              Save: () => {
          const input = li.firstElementChild;
          const span = document.createElement('span');
          span.textContent = input.value;
          li.insertBefore(span, input);
          li.removeChild(input);
          button.textContent = 'edit';
          }
         }; 


           nameActions[action]();
         }




       });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-05 04:38:50

我只能给你一个想法,如果你计划将任何大数据保存到localStorage,你可以将你的数据保存为字符串,并将其重新创建为JSON对象!下面是一个保存数据集的示例

代码语言:javascript
复制
var toSave = [ ];
var whatToSave = (Your invites data List, maybe a "text" var for your code?, organize 
to array or loop for your "UL" tag)

for(var i=0;i<whatToSave.length;i++){
   var obj = [];
   obj[i] = {
   text:whatToSave[i].text,
   data1:whatToSave[i].data1,
   data2:whatToSave[i].data2,
   ...
   }
   toSave.push(obj[i]);
}
var saveToString = JSON.stringify(toSave);
localStorage.setItem('invites', saveToString); //your invite data saved in local 
storage

....
//after refreshing or when you need to use your saved data

var cameBack = JSON.parse(localStorage.getItem('invites'));
//this will return same data again
//and make function to make UL using retured data array

如果你已经将需要的数据组织到数组中,那么你实际上不需要for循环和push,只需要写它来让你理解在localStorage中保存数据的想法。我不知道这会不会对你有帮助,但我会得到一个想法并将其实施到你的项目中:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59593721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档