jQuery-笔记 : toDOList案例

ToDOList案例

练习功能点

  1. 本地存储数据
  2. 使用本地存储数据
  3. 数据 增删改查功能
  4. 遍历数据 $.each() 使用
  5. 动态创建元素 加在前面 prepend() 加在后面是append()
  6. 给动态创建元素添加事件功能
  7. 清空数据 empty();
  8. push()添加新的数据到原先数据组中
  9. 获取修改 attr() 自定义值 prop() 元素属性
div,p,h2,h3,h5,label,input,header,li,ul,ol,body{list-style:none;margin:0;padding:0;}body{background-color:#eee;}header{width:100%;background-color:#666;color:#fff;overflow:hidden;line-height:35px;margin:auto;padding:10px;}header input{width:50%;height:35px;border-radius:20px;float:right;margin:0;padding:0 15px;}section,footer{width:100%;max-width:800px;overflow:hidden;margin:10px auto;}section h2{font-size:22px;color:#333;margin:10px auto;}section h2 span{float:right;font-size:12px;background-color:#fefefe;border-radius:5px;color:#999;display:inline-block;margin:6px 12px;padding:2px 5px;}section ol li{background-color:#fff;border-left:solid 5px #f06;}section ul li{background-color:#efefef;border-left:solid 5px #999;}section li{font-size:14px;border-radius:5px;color:#333;overflow:hidden;box-sizing:border-box;box-shadow:1px 1px 6px #999;margin:10px 5px;padding:10px 20px;}section li a{float:right;}section li p{float:left;display:inline-block;margin:0 10px;}section li input{width:20px;height:20px;float:left;}section li input[type=checkbox]:checked::after{content:"✓";color:#999;font-family:'Arial Narrow Bold', sans-serif;font-size:18px;font-weight:bolder;line-height:20px;background-color:#fefefe;border-radius:5px;border:solid 1px #999;margin:0 -3px;padding:1px 6px;}footer{text-align:center;font-size:12px;}
  <header>
        <section>
            <label for="title">toDOList</label>
            <input type="text" id="title" name="title" placeholder="添加ToDo" required>
        </section>
    </header>
    <section>
        <h2>正在进行<span id="todocount"></span></h2>
        <ol id="todolist" class="demo-box"> </ol>
        <h2>已经完成<span id="donecount"></span></h2>
        <ul id="donelist"> </ul>
    </section>
    <footer>
        Copyright&copy; 2018 todolist.cn
    </footer>
   $(function() {
       // 本地存储 只存字符串   只能所数组对像转换成为字符串格式  JSON.stringify()
       // localStorage.setItem("to", JSON.stringify(todolist));
       // 获取本地存储的数据,我们需要把里面的字符 串数据 转换为对像格式 JSON.parse()
       // data = JSON.stringify(data));
       load();
       $("#title").on("keydown", function(event) {
           if (event.keyCode === 13) {
               if ($(this).val() === "") {
                   alert("请输入你的操作")
               } else { // 先读取本地存储原来的数据 
                   var local = getDate();
                   //把local数组进行更新数据 ,把最新的数据追加给local数组
                   local.push({
                       title: $(this).val(),
                       done: false
                   });
                   //把local数组 存进本地数组
                   saveDate(local);
                   // todolist 本地存储数据渲染加载到页面
                   load();
                   $(this).val("");
               }
           }
       });
       $("ol,ul").on("click", "a", function() {
           // 获取本地存储
           var data = getDate();
           // 修改数据   attr()获取自定义属性
           var index = $(this).attr("id")
           data.splice(index, 1);
           // 保存到本地存储
           saveDate(data);
           // 重新渲染页面
           load();
       })

       // 正在进行和已完成选项操作
       $("ol,ul").on("click", "input", function() {
           // 获取本地存储数据 
           var data = getDate();
           // 修改数据attr()自定义值   prop()元素属性
           var index = $(this).siblings("a").attr("id");
           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) {
           localStorage.setItem("todolist", JSON.stringify(data))
       }

       //渲染加载数据 
       function load() {
           //读取本地数据 
           var data = getDate();
           // 先清空ol所有的数据 
           $("ol,ul").empty();
           // 待办总数
           var todoCount = 0;
           //做完总数
           var doneCount = 0;
           //遍历这个数据 
           $.each(data, function(i, e) {
               // 加在前面 prepend()    加在后面是append()
               if (e.done) {
                   $("ul").prepend("<li><input type='checkbox' checked='checked' value=''><p>" + e.title + "</p><a href='javascript:;' id=" + i + ">删除</a></li>")
                   doneCount++ //每遍历一次+1
               } else {
                   $("ol").prepend("<li><input type='checkbox' name='' value=''><p>" + e.title + "</p><a href='javascript:;' id=" + i + ">删除</a></li>");
                   todoCount++ //每遍历一次+1
               }

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

       }
   })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值