todolist实现步骤
-
在文本框内按下回车键就将当前内容添加到待办事项里
-
勾选待办事项复选框,就把当前数据添加到已完成事项里
-
点击已完成事项前的复选框,就把当前数据添加到待办事项里
-
点击文本框后面的×就会删除当前事项。
-
页面刷新数据不会丢失
todolist分析
- 刷新页面数据不会丢失,用本地存储localStorage
- 存储的数据格式是以数组进行存储
var todolist=[{ title:'',done:false}]
- 核心思路:不管是点击复选框还是按下回车都是把本地存储的数据加载到页面中去,防止刷新关闭页面数据丢失。
- 注意:在存储数据时,因为本地存储localStorage只能存储字符串格式,所以需要把对象转换为字符串JSON.stringify(data)。
- 注意:在获取本地存储的数据时,需要将字符串转换为对象格式JSON.parse(data),这样我们才能使用里面的数据
按下回车将新数据添加保存到本地部分
- 切记 页面中的数据要从本地存储里面获取,防止页面刷新数据丢失,所以要先把数据保存到页面里面去。
- 利用键盘事件keyCode==13判断是否是回车键。
- 声明一个数组保存数据。
- 要先获取本地存储的数据, 通过声明getdate()函数 ,存放到这个数组里面。
- 再将文本框里最新的数据追加到这个数组里面push()
- 再将最新的数组存放到本地存储中通过声明savadate()函数。
将本地存储的数据渲染到页面
- 因为将数据渲染到页面后面也要用,所以我们声明一个load()用来渲染页面。
- 先获取本地数据getdate()。
- 先遍历$·each数组,里面有几条数据就生成几个小li添加到ol里面。
todolist删除操作
- 点击a删除的不是a所在的小li而是删除存储在本地的数据
- 核心原理:先获取数据,点击a删除其所在本地存储的数据,将修改后的数据保存在本地存储中。
- 给小a添加自定义属性index索引
- 根据这个索引号删除相关的数据,利用数组splice(i,1)方法
- 存储修改后的数据,然后存储在本地存储。
- 重新渲染加载数据列表
- 因为a是动态创建的,所以我们要用on方法绑定事件。
todolist正在进行和已完成选项操作
- 当点击复选框后,获取本地属性,修改本地存储数据,将数据属性done改为当前复选框的checked状态。
- 在渲染页面数据load()函数里面加上一个条件,如果done为true时就是已完成事项,就将列表添加到已完成队列。
完整代码
$(function() {
// alert(11);
// 1. 按下回车 把完整数据 存储到本地存储里面
// 存储的数据格式 var todolist = [{title: "xxx", done: false}]
load();
$("#title").on("keydown", function(event) {
if (event.keyCode === 13) {
if ($(this).val() === "") {
alert("请输入您要的操作");
} else {
// 先读取本地存储原来的数据
var local = getDate();
// console.log(local);
// 把local数组进行更新数据 把最新的数据追加给local数组
local.push({ title: $(this).val(), done: false });
// 把这个数组local 存储给本地存储
saveDate(local);
// 2. toDoList 本地存储数据渲染加载到页面
load();
$(this).val("");
}
}
});
// 3. toDoList 删除操作
$("ol, ul").on("click", "a", function() {
// alert(11);
// 先获取本地存储
var data = getDate();
console.log(data);
// 修改数据
var index = $(this).attr("id");
console.log(index);
data.splice(index, 1);
// 保存到本地存储
saveDate(data);
// 重新渲染页面
load();
});
// 4. toDoList 正在进行和已完成选项操作
$("ol, ul").on("click", "input", function() {
// alert(11);
// 先获取本地存储的数据
var data = getDate();
// 修改数据
var index = $(this).siblings("a").attr("id");
console.log(index);
// data[?].done = ?
data[index].done = $(this).prop("checked");
console.log(data);
// 保存到本地存储
saveDate(data);
// 重新渲染页面
load();
});
// 读取本地存储的数据
function getDate() {
var data = localStorage.getItem("todolist");
if (data !== null) {
// 本地存储里面的数据是字符串格式的 但是我们需要的是对象格式的
return JSON.parse(data);
} else {
return [];
}
}
// 保存本地存储数据
function saveDate(data) {
localStorage.setItem("todolist", JSON.stringify(data));
}
// 渲染加载数据
function load() {
// 读取本地存储的数据
var data = getDate();
console.log(data);
// 遍历之前先要清空ol里面的元素内容
$("ol, ul").empty();
var todoCount = 0; // 正在进行的个数
var doneCount = 0; // 已经完成的个数
// 遍历这个数据
$.each(data, function(i, n) {
// console.log(n);
if (n.done) {
$("ul").prepend("<li><input type='checkbox' checked='checked' > <p>" + n.title + "</p> <a href='javascript:;' id=" + i + " ></a></li>");
doneCount++;
} else {
$("ol").prepend("<li><input type='checkbox' > <p>" + n.title + "</p> <a href='javascript:;' id=" + i + " ></a></li>");
todoCount++;
}
});
$("#todocount").text(todoCount);
$("#donecount").text(doneCount);
}
})