【问题标题】:How to append items to DOM with jquery coming from localstorage?如何使用来自本地存储的 jquery 将项目附加到 DOM?
【发布时间】:2018-02-28 20:25:55
【问题描述】:

我有一个问题。我有一个输入字段并将输入存储在本地存储中。单击时(在“添加”上),我正在向本地存储添加输入,并希望立即将其附加到我的 ul 元素中。我不能只附加当前输入,因为它会在页面重新加载时消失,但是当我从本地存储中获取项目时,它没有正确显示。我对此进行了研究,但无论我尝试了什么,我都会得到奇怪的结果。我包括了下面的代码,还做了一个 jsfiddle。非常感谢!

jsfiddle:https://jsfiddle.net/codingcodingcoding/41mztdnu/

html:

<input id="title"/>
<input id="text"/>
<button id="button">Add</button>
<ul id="output"></ul>

js:

$("#button").click(function () {
    var title = $("#title").val();
    var text = $("#text").val();
    var todos = JSON.parse(localStorage.getItem("todos")) || [];

    var newTodos = {
        "title": title,
        "text": text
    }
    todos.push(newTodos);

    localStorage.setItem("todos", JSON.stringify(todos))

    todos.forEach(function (todo) {
        $("#output").append("<li>" + todo.text + "</li>")
    })

})

更新:下面的代码确实显示了当前添加的项目,但在页面刷新时消失了,因为只有待办事项列表是持久的,这里的“当前”不能是整个列表。

localStorage.setItem("todos", JSON.stringify(todos))
var current=JSON.parse(localStorage.getItem("info"))
$("#output").append("<li>" + current.text + "</li>")

【问题讨论】:

  • 试试改成var todos = JSON.parse(localStorage.getItem("todos") || "[]");
  • 每次点击按钮它都会添加一个li项到存储中,所以下次点击它会从本地存储中添加x个lis,你不只是想追加一个新的li每次点击时 var newTodos 的值?
  • 您需要在 forEach 循环之前执行 $("#output").empty();
  • @Ryan Ive 更新了我的问题注册。你说的。问题是当我只添加新项目时——起初它看起来很好,但在页面刷新时它都消失了。那是我的问题 - 我想添加新项目,但希望显示整个列表

标签: javascript jquery append local-storage


【解决方案1】:

创建另一个仅填充列表的函数,以便您可以在页面加载时立即使用它,因此它不会以空列表开头。在添加更多之前,请确保此函数清空列表中的现有项目。

$("#button").click(function() {
  var title = $("#title").val();
  var text = $("#text").val();
  var todos = JSON.parse(localStorage.getItem("todos")) || [];
  var newTodos = {
    "title": title,
    "text": text
  }
  todos.push(newTodos);
  localStorage.setItem("todos", JSON.stringify(todos))
  populateList();
});

function populateList() {
  var todos = JSON.parse(localStorage.getItem("todos")) || [];
  $("#output").empty();
  todos.forEach(function(todo) {
    $("#output").append("<li>" + todo.text + "</li>")
  })
}

populateList();

https://jsfiddle.net/41mztdnu/7/

【讨论】:

  • 谢谢,现在可以使用了!!您是否碰巧知道如何制作,以便首先添加新项目,而不是(目前是最后一个)列表中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 2014-10-21
  • 1970-01-01
相关资源
最近更新 更多