本文主要是对记事清单案例中javaScript部分的分析。
目录
主要思路
功能描述:
- 文本框里面输入内容,按下回车,就可以生成待办事项。
- 点击待办事项复选框,就可以把当前数据添加到已完成事项里面。
- 点击已完成事项复选框,就可以把当前数据添加到待办事项里面。
- 但是本页面内容刷新页面不会丢失。
切记: 页面中的数据,都要从本地存储里面获取,这样刷新页面才不会丢失数据,所以先要把数据保存到本地存储里面。存储的数据格式:var todolist = [{ title : ‘xxx’, done: false}]
主要思路
一.toDoList 按下回车把新数据添加到本地存储里面
利用事件对象.keyCode判断用户按下回车键(13),当用户输入内容不为空时,进行操作。
先要读取本地存储原来的数据(声明函数 getLocal()),放到这个数组里面。 之后把最新从表单获取过来的数据,追加到数组里面。 最后把数组存储给本地存储 (声明函数 savaLocal())。
$("#title").on("keydown",function(e) {
if(e.keyCode===13) {
if ($(this).val().trim()==="") {
alert("请输入您想要的操作");
}else {
//读取本地存储内容
var local=getLocal();
//新内容追加给本地存储里:先追加给对象,对象再转化为字符串放入本地存储
local.push({title:$(this).val(),done:false});
// console.log(local)
// localStorage.setItem("todolist",JSON.stringify(local));
saveLocal(local);
//2.本地存储数据渲染到页面中
load();
//优化
$(this).val("");
}
}
})
- 读取本地存储数据getLocal()函数
获取本地存储数据,需要把里面的字符串转换为对象格式JSON.parse() 我们才能使用里面的数据。
//读取本地存储内容
function getLocal() {
var data=localStorage.getItem("todolist")
if(data!==null) {
return JSON.parse(data);
}else {
return [];
}
}
- 放入本地存储函数
放入本地存储的数据必须是字符串形式的,所以利用JSON.stringify()方法把数组转化为字符串再放入本地存储。
//放入本地存储,注意形参的使用
function saveLocal(data) {
localStorage.setItem("todolist",JSON.stringify(data));
}
- 渲染加载数据函数
//渲染加载数据
function load() {
var todoCount=0;
var doneCount=0;
//把ol,ul里面的内容清空
$("ol,ul").empty();
var data=getLocal();
$.each(data,function(i,ele) {
//注意自定义属性id的添加
// var lis=$("<li><input type='checkbox'><p>"+ele.title+"</p><a href='javascript:;' id="+i+"></a></li>")
//如果是true添加到ul已经完成事项中,如果是false则添加到ol正在进行事项中
if(ele.done) {
$("ul").prepend($("<li><input type='checkbox' checked='true'><p>"+ele.title+"</p><a href='javascript:;' id="+i+"></a></li>"));
doneCount++;
}else {
$("ol").prepend($("<li><input type='checkbox'><p>"+ele.title+"</p><a href='javascript:;' id="+i+"></a></li>"));
todoCount++;
}
})
//统计事项
$("#todocount").html(todoCount);
$("#donecount").html(doneCount);
}
二.删除操作
核心原理:先获取本地存储数据,删除对应的数据,保存给本地存储,重新渲染列表li。
$("ol,ul").on("click","a",function(e) {
var local= getLocal();
// console.log(local)
var index=$(e.target).attr("id");
// console.log(index)
local.splice(index,1);
saveLocal(local);
load();
})
三.正在进行和已完成选项操作
当点击复选框,修改本地存储数据,再重新加载数据列表。
$("ol,ul").on("click","input",function(e) {
var local= getLocal();
var index=$(e.target).siblings("a").attr("id")
// console.log($(e.target).prop("checked"))
local[index].done=$(e.target).prop("checked")
// console.log(local)
saveLocal(local);
load();
})
四.统计正在进行和已完成个数
声明2个变量 :todocount 待办个数 donecount 已完成个数 当进行遍历本地存储数据的时候, 如果 数据done为 false, 则 todocount++, 否则 donecount++。
//统计事项
$("#todocount").html(todoCount);
$("#donecount").html(doneCount);
todolist.js完整代码
$(function() {
load();
// 1.按下回车,把完整数据存放在本地存储里面
$("#title").on("keydown",function(e) {
if(e.keyCode===13) {
if ($(this).val().trim()==="") {
alert("请输入您想要的操作");
}else {
//读取本地存储内容
var local=getLocal();
//新内容追加给本地存储里:先追加给对象,对象再转化为字符串放入本地存储
local.push({title:$(this).val(),done:false});
// console.log(local)
// localStorage.setItem("todolist",JSON.stringify(local));
saveLocal(local);
//2.本地存储数据渲染到页面中
load();
//优化
$(this).val("");
}
}
})
//3.删除操作:先获取本地存储数据,删除对应的数据,保存给本地存储,重新渲染列表li
$("ol,ul").on("click","a",function(e) {
var local= getLocal();
// console.log(local)
var index=$(e.target).attr("id");
// console.log(index)
local.splice(index,1);//存在bug
saveLocal(local);
load();
})
//4.正在进行和已经完成的选项操作
// 当点击复选框,修改本地存储数据,再重新加载数据列表
$("ol,ul").on("click","input",function(e) {
var local= getLocal();
var index=$(e.target).siblings("a").attr("id")
// console.log($(e.target).prop("checked"))
local[index].done=$(e.target).prop("checked")
// console.log(local)
saveLocal(local);
load();
})
//5.修改事项
// $("ul,ol").on("dblclick","input",function(e) {
// console.log('11')
// $(e.target).text($(input).val());
// })
//读取本地存储内容
function getLocal() {
var data=localStorage.getItem("todolist")
if(data!==null) {
return JSON.parse(data);
}else {
return [];
}
}
//放入本地存储,注意形参的使用
function saveLocal(data) {
localStorage.setItem("todolist",JSON.stringify(data));
}
//渲染加载数据
function load() {
var todoCount=0;
var doneCount=0;
//把ol里面的内容清空
$("ol,ul").empty();
var data=getLocal();
$.each(data,function(i,ele) {
//注意自定义属性id的添加
// var lis=$("<li><input type='checkbox'><p>"+ele.title+"</p><a href='javascript:;' id="+i+"></a></li>")
//如果是true添加到ul已经完成事项中,如果是false则添加到ol正在进行事项中
if(ele.done) {
$("ul").prepend($("<li><input type='checkbox' checked='true'><p>"+ele.title+"</p><a href='javascript:;' id="+i+"></a></li>"));
doneCount++;
}else {
$("ol").prepend($("<li><input type='checkbox'><p>"+ele.title+"</p><a href='javascript:;' id="+i+"></a></li>"));
todoCount++;
}
})
//统计事项
$("#todocount").html(todoCount);
$("#donecount").html(doneCount);
}
})
运行结果: