前端|作一个TODO,练习DOM操做(原生JS版本)

这是我在github上的todo例子,你们感兴趣的话能够先去看看。git

原生js版本:https://github.com/remy-cpu/VanillaJS-Todogithub

jQuery版本:https://github.com/remy-cpu/JQuery-Todo数组

可参考例子:todoMVC 。mvc

界面样式

 

功能需求

  • 添加 / 删除 todo
  • 完成 / 取消完成 todo
  • 显示全部/ 未完成/ 已完成/ 已删除 的 todo
  • 显示已完成的todo的数目和全部todo的数目
  • 提供修改 todo 功能
  • 清除全部已经完成的 todo
  • 添加回收站功能,能够查看全部已删除的todo,能够从已删除的todo中恢复todo,能够清空回收站
  • 尝试给todo加上优先级(高级、中级、无优先级)。优先级高的会显示在比较靠上面。(同级“后来者居上”)
  • 添加用户验证: 登陆注销,利用 Local Storage

 

接下来咱们会详细地讲解这些功能的实现,你们准备好了吗?嘿嘿。dom

主要思路:咱们作添加、删除、优先级设置等操做时,都会把这些参数(或者说状态)保存到本地里, 而后从新渲染页面load( ).this

准备工做

//读取本地数据
  function getData() {
    var data = localStorage.getItem("storeUsers");
    if (data !== null) {
      return JSON.parse(data);
    } else {
      return [];
    }
  }
  //保存本地存储数据
  function saveData(data) {
    localStorage.setItem("storeUsers", JSON.stringify(data));
  }

  //获取删除的数据
  function getDeleted() {
    var data = localStorage.getItem("dels");
    if (data !== null) {
      return JSON.parse(data);
    } else {
      return [];
    }
  }

  //保存删除的数据
  function saveDeleted(data) {
    localStorage.setItem("dels", JSON.stringify(data));
  }

 

添加 / 删除 todo

一、添加issuespa

分析:咱们在input文本框输入issue,按下回车键,将这条issue存入users数组中,在通过渲染页面,插入到页面中。3d

//最终本地存储数据示例
[
  {
    name: "11",//用户名
        password: "123456",//用户密码
        todos: [{
        title: "23",            //issue具体内容
        completed: false, //issue完成状况
        priority: 0            //issue优先级
      }]
  }
]

//保存删除的数据是为咱们以后作回收站功能作准备
[
  {
    name:"11",
  done:[{
        title: "23",            //issue具体内容
        completed: false, //issue完成状况
        priority: 0            //issue优先级
       }]
 }
]
function addItem() {
      //建立新的li
      var input = document.querySelector('.input');
      input.onkeyup = function (e) {
        //若是文本框内容为空,就弹出警告框,想好看点也能够本身作一个提示框
        if (input.value == '') {
          alert("输入内容不能为空");
          return false;
        }
        //若是按下的是回车键
        if (e.keyCode == 13) {
          //必须先登陆
          if (!online) {
            showTips("请先登陆 !");
            input.value = '';
            return false;
          }
          
          //获取数组
          var users = getData();
          //找到这是users数组中的第几个用户
          cnt = Match(users);
          
          //找到的todos数组中第一个优先级为0的issue
          var index;
          for (var i = 0; i < users[cnt].todos.length; i++) {
            if (users[cnt].todos[i].priority == 0) {
              index = i;
              break;
            }
          }
          
          //每一条issue的基本形式
          var obj = {
            title: this.value,
            completed: false,
            priority: 0        //刚添加的issue的优先级都为零
          };
          
          //这里是体现同级者后来居上
          //将新的issue插入到你找到的todos数组中第一个优先级为0的issue前面
          users[cnt].todos.splice(index, 0, obj);
          //保存数组
          saveData(users);
          //每次都先把新的li添加到本地存储,再连同以前的issue一块儿渲染到页面上
          load();
          
          //清空文本框的内容
          input.value = '';
        }
      }
    }

接下来会继续更新,但愿和你们多多交流!!code

相关文章
相关标签/搜索