jQuery模仿ToDoList实现简单的待办事项列表

这篇文章主要介绍了jQuery模仿ToDoList实现简单的待办事项列表,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

功能:在文本框中输入待办事项按下回车后,事项会出现在未完成列表中;点击未完成事项前边的复选框后,该事项会出现在已完成列表中,反之亦然;点击删除按钮会删除该事项。待办事项的数据是保存到本地存储的(localStorage),就算关闭页面再打开,数据还是存在的(前提是要用相同浏览器)。

ToDoList链接: ToDoList―最简单的待办事项列表

先把css样式以及js文件引入进来,jQuery文件要写在你自己的js文件上边

 

HTML代码:

  

正在进行

已经完成

Copyright © 2019

 body { margin: 0; padding: 0; font-size: 16px; background: #CDCDCD; } header { height: 50px; background: #333; background: rgba(47, 47, 47, 0.98); } section { margin: 0 auto; } label { float: left; width: 100px; line-height: 50px; color: #DDD; font-size: 24px; cursor: pointer; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } header input { float: right; width: 60%; height: 24px; margin-top: 12px; text-indent: 10px; border-radius: 5px; box-shadow: 0 1px 0 rgba(255, 255, 255, 0.24), 0 1px 6px rgba(0, 0, 0, 0.45) inset; border: none } input:focus { outline-width: 0 } h2 { position: relative; } span { position: absolute; top: 2px; right: 5px; display: inline-block; padding: 0 5px; height: 20px; border-radius: 20px; background: #E6E6FA; line-height: 22px; text-align: center; color: #666; font-size: 14px; } ol, ul { padding: 0; list-style: none; } li input { position: absolute; top: 2px; left: 10px; width: 22px; height: 22px; cursor: pointer; } p { margin: 0; } li p input { top: 3px; left: 40px; width: 70%; height: 20px; line-height: 14px; text-indent: 5px; font-size: 14px; } li { height: 32px; line-height: 32px; background: #fff; position: relative; margin-bottom: 10px; padding: 0 45px; border-radius: 3px; border-left: 5px solid #629A9C; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.07); } ol li { cursor: move; } ul li { border-left: 5px solid #999; opacity: 0.5; } li a { position: absolute; top: 2px; right: 5px; display: inline-block; width: 14px; height: 12px; border-radius: 14px; border: 6px double #FFF; background: #CCC; line-height: 14px; text-align: center; color: #FFF; font-weight: bold; font-size: 14px; cursor: pointer; } footer { color: #666; font-size: 14px; text-align: center; } footer a { color: #666; text-decoration: none; color: #999; } @media screen and (max-device-width: 620px) { section { width: 96%; padding: 0 2%; } } @media screen and (min-width: 620px) { section { width: 600px; padding: 0 10px; } }

  index.css

接下来开始写我们自己的js代码

将多次使用的代码封装成函数,方便使用

①获取本地存储的数据。如果本地有数据则直接获取过来,没有数据的话就返回一个空数组

 function getDate() { var data = localStorage.getItem("todolist");  // 将获取到的数据赋给data if(data !== null) {   // 如果本地有数据,则返回数据 return JSON.parse(data); // 本地存储只能存储字符串,所以要想获取里边的数据就必须将字符串转换为数组形式返回 } else { return [];  // 如果本地没有数据,则返回一个空数组 } }

②保存本地存储数据

 function saveDate(data) { // 用JSON.stringify()将数组转化成字符串保存到本地存储 localStorage.setItem("todolist", JSON.stringify(data)); }

③渲染页面 加载数据

先将本地存储数据获取过来;将他们遍历(遍历之前先将列表清空),看他们是否已经被完成(通过数组里我们自己添加的done的值为true还是false来判断),如果已经被完成则添加到ul列表,否则添加进ol列表里;同时声明两个变量来保存已完成和未完成事项的个数

 function load() { var data = getDate();  // 先获取本地存储数据 // 遍历本地存储数据 将他们添加到列表中 $("ol, ul").empty();  // 遍历之前先清空列表 var doneCount = 0; // 已经完成的个数 var todoCount = 0; // 正在进行的个数 $.each(data, function(i, ele) {  // i为索引 ele为遍历对象 // 如果复选框被选中(已完成done: true)添加到ul里,未被选中(未完成done: false)添加到ol里 if(ele.done) { $("ul").prepend("
  • " + ele.title + "

  • "); doneCount++; // 每添加一个li,已完成数加一 } else { $("ol").prepend("
  • " + ele.title + "

  • "); todoCount++; } }) $("#donecount").text(doneCount); $("#todocount").text(todoCount); }

    1. 用户输入待办事项按下回车,将事项添加进列表

    给文本框绑定键盘按下事件,通过ASCII值来判断用户是否按下了回车(回车的ASCII值为13);

    不能直接在本地存储里更改数据,所以要先获取数据(数组形式),把数组进行更新数据(把最新数据追加给数组),再保存到本地存储;

    然后对页面进行重新渲染 更新数据

     load();  // 第一步先渲染页面,不然一开始刷新页面时列表不显示 $("#title").on("keydown", function(event) { if(event.keyCode === 13) { if($(this).val() !== "") { var data = getDate();    // 获取本地存储数据 // 把数组进行更新数据,把最新数据追加给数组 data.push({title: $(this).val(), done: false}); saveDate(data);   // 保存到本地存储 load();       // 渲染加载到页面 $(this).val(""); } } })

    2. 删除待办事项

    先获取本地存储数据;

    用attr获取自定义属性index(索引)得到用户点击的第几个事项,通过索引删除数组里对应的那组数据;

    将更新过的数组保存到本地存储 再渲染给页面

     $("ol, ul").on("click", "a", function() { var data = getDate();  // 获取本地数据(data是局部变量,不用担心冲突) var index = $(this).attr("index");  // 用attr获取自定义属性index,得到索引 // splice(index, num)删除数组对象 index为开始删除的位置,num为删除几个 data.splice(index, 1); saveDate(data); load(); })

    3. 用户点击复选框来选择事项已完成或未完成

    获取本地存储数据;

    通过复选框的兄弟a的index属性来获取用户点击的事项的索引(index),将第index个数据的done属性值修改为复选框的值;

    将更新过的数组保存到本地存储 再渲染给页面

     $("ol, ul").on("click", "input", function() { var data = getDate(); // 利用a获取用户点击的第几个复选框 var index = $(this).siblings("a").attr("index"); // 修改数据:data[索引].属性名 获取固有属性用prop data[index].done = $(this).prop("checked"); saveDate(data); load(); })

    详细JS代码:

     $(function() { load();  // 先渲染页面,不然一开始刷新页面时列表不显示 // 1、绑定键盘按下事件 $("#title").on("keydown", function(event) { if(event.keyCode === 13) {  // 是否按下了回车 回车的ASCII值为13 if($(this).val() == "") { alert("请输入事项内容!") } else { // 不能直接在本地存储里改数据,所以要先获取数据,然后改变数组,再保存到本地 var data = getDate();  // 获取本地存储数据 // 把数组进行更新数据,把最新数据追加给数组 data.push({title: $(this).val(), done: false}); saveDate(data);  // 保存到本地存储 load();  // 渲染加载到页面 $(this).val(""); } } }) //2、删除待办事项 $("ol, ul").on("click", "a", function() { var data = getDate();  // 获取本地数据 var index = $(this).attr("index"); // 用attr获取自定义属性,得到索引 // splice(index, num)删除数组对象 index为开始删除的位置,num为删除几个 data.splice(index, 1); saveDate(data);  // 删除后在把data保存到本地存储 load();  // 重新渲染页面 }) //3、正在进行和已完成 $("ol, ul").on("click", "input", function() { var data = getDate();  // 获取数据 // 获取用户点击的第几个按钮,利用a var index = $(this).siblings("a").attr("index"); // 修改数据 data[索引].属性名 获取固有属性用prop data[index].done = $(this).prop("checked"); saveDate(data); // 保存到本地存储 load();  // 渲染页面 }) // 获取本地存储数据 function getDate() { var data = localStorage.getItem("todolist"); if(data !== null) {   // 如果本地有数据,则返回数据 return JSON.parse(data); // 本地存储只能存储字符串,所以要将字符串转换为数组形式返回 } else {    // 如果本地没有数据,则返回一个空数组 return []; } } // 保存本地存储数据 function saveDate(data) { // 用JSON.stringify()将数组转化成字符串保存到本地存储 localStorage.setItem("todolist", JSON.stringify(data)); } // 渲染加载数据 function load() { var data = getDate();  // 先获取本地存储数据 // 遍历本地存储数据 将他们添加到列表中 $("ol, ul").empty();  // 遍历之前先清空列表 var doneCount = 0; // 已经完成的个数 var todoCount = 0; // 正在进行的个数 $.each(data, function(i, ele) {  // i是索引 ele为遍历对象 // 如果复选框被选中(已完成)添加到ul里,没被选中(未完成)添加到ol里 if(ele.done) { $("ul").prepend("
  • " + ele.title + "

  • "); doneCount++; } else { // 将数据添加进列表里 $("ol").prepend("
  • " + ele.title + "

  • "); todoCount++; } }) $("#donecount").text(doneCount); $("#todocount").text(todoCount); } })

    总结

    以上所述是小编给大家介绍的jQuery模仿ToDoList实现简单的待办事项列表,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对html中文网网站的支持!
    如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

    以上就是jQuery模仿ToDoList实现简单的待办事项列表的详细内容,更多请关注0133技术站其它相关文章!

    赞(0) 打赏
    未经允许不得转载:0133技术站首页 » JavaScript 教程