javascript - 如何在 localStorage 中存储列表

标签 javascript html local-storage

我创建了一个 CRUD 页面,并在用户键入文本时在输入中将文本添加到列表中。现在我想将该列表保存在 localStorage 中,我试图存储它,但我在控制台日志中得到一个空对象。任何帮助将不胜感激。

JavaScript

const addItem = function() {
  let val = input.value;
  if (val) {
    let li = document.createElement('li');
    let inner = '<h1 class="text">' + val + '</h1>';
    inner += '<button class="delete">Delete</button>';
    inner += '<button class="edit">Edit</button>';
    li.innerHTML = inner;
    container.appendChild(li);
    input.value = '';
    currentItem = li.firstChild;  
    //i want to save the below list
    items = document.querySelectorAll('li');
    for(let item of items){
      //this return empty object
      localStorage.setItem('list', JSON.stringify(item) );
      console.log(localStorage)
    }
    for (let del of document.querySelectorAll('.delete')) {
      del.addEventListener('click', deleteItem);
    }
    for (let edit of document.querySelectorAll('.edit')) {
      edit.addEventListener('click', editItem);
    }
  } else {
      alert('please add some text');
    return;
  }
}

HTML 如果需要

<div class="main">
  <h2>JavaScript CRUD Bookmark</h2>
  <form>
    <input type="text" placeholder="search">
  </form>
  <ul></ul>
  <div>
    <input class="add-text" type="text" placeholder="Add Text">
    <button id="add">Add</button>
    <button id="update">update</button>
  </div>
</div>

最佳答案

我已经获取了您的代码并将其重组为您可以完成的解决方案。请阅读我的代码注释以了解我所做的事情。

// HTML is almost the same as yours. I added a class name to the <ul>

// Generates a unique string of characters suitable for a key
function guid() {
  function s4() {
    return Math.floor((1 + Math.random()) * 0x10000)
      .toString(16)
      .substring(1);
  }
  return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
}

const list = document.querySelector('.current-list'); // the <ul>

const addItem = function() {
  // Get the input value

  let input = document.querySelector('.add-text');
  let val = input.value;

  if (val) {
     // 1. Create unique key
     let uniqueKey = guid();

     // 2. Append item to the list, visually. Note the contentEditable
     //    attribute. We can now click directly into the list item contents
     //    and change it. We can then update the storage when leaving the input.
     list.innerHTML += `\n<li data-key="${uniqueKey}" contentEditable>${val}</li>`;

     // 3. Set the storage key
     localStorage.setItem(uniqueKey, JSON.stringify(val));
  } else {
      alert('please add some text');
    return;
  }
}

// TODO: Add update item function

// TODO: Add delete item function

document
  .querySelector('#add')
  .addEventListener('click', addItem);

fiddle :http://jsfiddle.net/6mrbaL2n/

关于javascript - 如何在 localStorage 中存储列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53641447/

相关文章:

javascript - 在 angular js div 中使用应用程序名称不起作用

javascript - 使用JS或Angular Js在html中添加行后如何本地存储表格?

javascript - 使用 jQuery 在 <InsertItemTemplate> 中查找按钮

javascript - 如何确定 HTML 元素是否在框架内?

javascript - 使用 jquery 的 slider 分页

javascript - 来自 API 的变量未传递到 Angular 中的本地存储

javascript - 如何考虑 localStorage 的大小限制

javascript - ReactDOM.findDOMNode 与 getAttribute ("")返回 null

javascript - 在 Javascript 中将字符串转换为数组的数组

javascript - 如何在提交时清除输入值,同时将值添加到跨度区域?