• toDoList案例


    1. 效果:  

      1. 在输入框输入内容之后  点击添加可以向正在进行的任务下面添加上内容.还需要将新添加的内容存到本地.  2.点击一下前面的选中框的时候  可以让这一行向 已经完成的任务进行跳转.需要修改一下 在本地存储的数据中的 isOk:true  代表完成了 

     2.代码:

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>Document</title>
        <link rel="stylesheet" href="./css/index.css" />
      </head>
      <body>
        <!-- 输入框 -->
        <div class="plan">
          <h1>传智-ToDoList</h1>
          <div>
            <input class="txt" placeholder="请输入目标..." type="text" />
            <input type="button" class="add" value="添加" />
          </div>
        </div>
        <div class="w">
          <h2>正在进行的任务</h2>
          <ol>
            <!-- <li><input type="checkbox"><span>吃饭</span></li> -->
          </ol>
          <h2>已经完成的任务</h2>
          <ul>
            <!-- <li><span>吃饭</span></li>-->
          </ul>
        </div>
        <script src="lib/jquery-1.12.4.js"></script>
        <!-- <script src="js/index.js"></script> -->
        <script type="text/javascript">
          //获取本地的数据
          let str = localStorage.getItem("toDoList"); //进行判断是否有 如果没有话 自定义一个数据
          if (str == null) {
            localStorage.setItem(
              "toDoList",
              '[{"name":"吃饭","isOk":false },{"name":"睡觉","isOk":true }]'
            );
            str = localStorage.getItem("toDoList");
          } //得到这个数据之后  进行循环这个数据  在每次循环中还要判断下isOk的值  决定新创建li的标签是放在哪个位置 // 在创建li标签的时候 通过attr()创建一个假设的索引值  类似于index  为了标记这个li表示的是数据中的哪个对象  所以根据数组的索引值来创建最好
          let arr = JSON.parse(str);
          for (let i = 0; i < arr.length; i++) {
            if (arr[i].isOk == true) {
              $("<li></li>")
                .html("<span>" + arr[i].name + "</span>")
                .appendTo("ul");
            } else {
              $("<li></li>")
                .attr("num", i)
                .html('<input type="checkbox"><span>' + arr[i].name + "</span>")
                .appendTo("ol");
            }
          }
          //设置添加事件
          $(".add").click(function () {
            let doThing = $(".txt").val();
            let li = $(
              '<li><input type="checkbox"><span>' + doThing + "</span></li>"
            );
            $("ol").eq(0).append(li); //页面元素已经添加完成之后  将数据更新到本地
            $(".txt").val(""); //新创建的元素最好是根据本地数据的索引值设定的自定义属性
            li.attr("num", arr.length);
            //页面完成之后  需要在本地保存数据
            arr.push({ name: doThing, isOk: false });
            str = JSON.stringify(arr);
            localStorage.setItem("toDoList", str);
          });
          //给checkbox 加上事件委托
          $("ol").on("click", "input", function () {
            $("ul").append($(this).parent());
            $(this).hide();
            let li = $(this).parent();
            //通过li设定的自定义属性 num 也就是这个li对象在数组中得到索引  从而找到这个对象  然后进行修改其isOk的值
            let i = li.attr("num");
            arr[i].isOk = true;
            str = JSON.stringify(arr);
            localStorage.setItem("toDoList", str);
          });
        </script>
      </body>
    </html>

    3.创作流程

      1.给添加按钮 完成事件绑定 

      2,给checkbox 添加事件绑定   因为都是li和input都是动态创建的元素 绑定不上事件 所以使用 事件委托给外面的ol 

      3.在页面功能代码写好之后  需要对本地数据进行增加或者修改的处理

         3.1 在页面加载的时候 首先要去本地区获取数据  通过数据中的isOk的不同 从而创建不同li标签 添加到不同位置 去显示.

          注意:创建li标签的时候  需要根据数据中的每个对象自定义一个属性num 

        3.2 点击增加的之后  需要将内容更新到本地数据中去

        3.3 点击checkbox的时候 需要根据li的获取到对应数据中的对象  从而修改一下isOk的值 

          注意:因为一开始在创建li标签就是根据数据中的对象的索引值创建的 并且将对象的索引值 设定成了每个li的自定义属性     通过li中的自定义属性就可以获取到 对象在数据中的索引值 从而找到这个对象 进行了修改

    4总结:

      在给页面创建li标签的时候  没有意识到 数据中的每个对象与li之间的关系  

      数据中的每个对象就相当创建的一个li对象  

      因为一开始的时候是在获取数据的时候创建的li对象给li增加的自定义属性  则在手动添加数据的时候  也要给li设置自定义属性 

  • 相关阅读:
    关于ThreadLocal
    二月份推荐的书籍
    《编写高质量代码:改善Java程序的151个建议》笔记
    Oracle中定义package以及存储过程的使用
    不同系统平台下Java默认的安装路径
    WebSphere数据源配置
    Dedication(转)
    Upgrading to Java 8——第二章 Method References(方法引用)
    Upgrading to Java 8——第一章 Lambda表达式
    Multi-catch
  • 原文地址:https://www.cnblogs.com/shicongcong0910/p/12717057.html
Copyright © 2020-2023  润新知