用JQuery实现todolist记录清单(包含本地存储)案例

步骤

  1. 刷新页面,不会丢失数据,因此需要用到本地存储localStorage
  2. 数据先放到本地存储中,再渲染css
  3. 存储数据格式:本地存储只能存储字符串的数据格式请添加图片描述
  4. 数组对象转换成字符串格式 JSON.stringify()
localStorage.setItem("todo",JSON.stringify(todolist));
  1. 获取本地存储的数据,我们需要把里面的字符串数据转换为对象格式 JSON.parse()
var data=localStorage.getItem("todo");
data=JSON.parse(data);

以往都是把数据保存在内存中,刷新后数据会被清空

  1. todolist按下回车把新数据添加到本地存储中,回车键的值为13
          $(".todo").on("keydown",function(event){
                if(event.keyCode===13)
                {}
            });
  1. 在许多时候都需要先读取本地数据,因此将其封装成一个函数
function getData(){
       var data=localStorage.getItem("todolist");
       if(data!==null)
       {
           return JSON.parse(data);
       }
       else{
           return [];
       }
   }
  1. 保存本地存储数据
function saveData(data){
   localStorage.setItem("todolist",JSON.stringify(data));
}
  1. 渲染加载数据
function load(){
       var data=getData();
       $("ul,ol").empty();
       var doingCount=0;
       var doneCount=0;
       $.each(data,function(i,e){
           if(e.done)
           {
               doneCount++;
               $("ol").prepend("<li><input type='checkbox' checked='checked'><p>"+e.title+"</p><a href='javascript:;'' id="+i+">-</a></li>");
           }
           else{
               doingCount++;
               $("ul").prepend("<li><input type='checkbox'><p>"+e.title+"</p><a href='javascript:;'' id="+i+">-</a></li>");
           }
       })
       $(".doingcount").text(doingCount);
       $(".donecount").text(doneCount);
   }

全部代码

<!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>
    <script src="javascript/jquery.min.js"></script>
</head>
<style>
    *{
        margin: 0;
        padding: 0;
    }
    header{
        height: 50px;
        background: rgba(47,47,47,0.98);
    }
    section{
        width: 600px;
        margin: 0 auto;
        color: #ccc;
        padding-top: 10px;
    }
    .title{
        float: left;
    }
    .todo{
        width: 60%;
        height: 24px;
        float: right;
        border-radius: 5px;
        text-indent: 10px;
        box-shadow: 0 1px 0 rgba(255,255,255,0.14), 0 1px 6px rgba(0,0,0,0.35) inset;
        outline: none;
    }
    body{
        background: #cdcdcd;
    }
    .main{
        width: 600px;
        margin: 0 auto;
    }
    .doing-list{
        margin: 20px 0;
    }
    .done-list{
        margin: 20px 0;
    }
    .doingcount,
    .donecount{
        float: right;
        background-color: #fff;
        background: #e6e6fa;
        border-radius: 10px;
        padding: 0 5px;
        height: 20px;
        line-height: 20px;
        color: #666;
        margin-top: -30px;
        font-size: 14px;
        font-weight: 500;
    }
    ol,
    ul{
        list-style: none;
    }
    ul li{
        height: 35px;
        background-color: #fff;
        margin-top: 10px;
        border-left: 5px solid #629a9c;
        border-radius: 4px;
        line-height: 35px;
    }
    li input{
        margin: 0 15px;
        font-size: 30px;
    }
    li a{
        text-decoration: none;
        color: #fff;
        float: right;
        width: 14px;
        height: 12px;
        background-color: #ccc;
        margin: 5px 10px;
        line-height: 10px;
        border-radius: 14px;
        border: 6px double #fff;
        text-align: center;
        font-weight: bold;
        font-size: 14px;
    }
    ol li{
        height: 35px;
        background-color: #fff;
        margin-top: 10px;
        border-left: 5px solid #999;
        border-radius: 4px;
        line-height: 35px;
        opacity: 0.5;
    }
    footer{
        margin: 10px;
        color: #666;
        font-size: 14px;
        text-align: center;
    }
    .clear{
        text-decoration: none;
        color: #999;
    }
    li p{
        display: inline-block;
    }
</style>
<body>
    <header>
        <section>
            <h2 class="title">ToDoList</h2>
            <input type="text" class="todo" placeholder="添加ToDo">
        </section>
    </header>
    <div class="main">
        <div class="doing-list">
            <h2 class="doing">正在进行</h2>
            <div class="doingcount">0</div>
        </div>
        <ul>
        </ul>
        <div class="done-list">
            <h2 class="done">已经完成</h2>
            <div class="donecount">0</div>
        </div>
        <ol>
        </ol>
    </div>
    <footer> 
        Copyright © 2020 localhost
        <a href="javacript:;" class="clear">clear</a>
    </footer>
    <script>
        $(function(){
            load();
            $(".todo").on("keydown",function(event){
                if(event.keyCode===13)
                {
                    if($(this).val()=="")
                    {
                        alert("请输入你要的操作");
                    }
                    else{
                         // 先读取本地数据
                    var local=getData();
                    // console.log(local);
                    local.push({title:$(this).val(),done:false});
                    saveData(local);
                    load();
                    $(this).val("");
                    }
                }
            });
        
            $("ul,ol").on("click","a",function(){
                var data=getData();
                var index=$(this).attr("id");
                // console.log(index);
                data.splice(index,1);
                saveData(data);
                load();
            });
            $("ul,ol").on("click","input",function(){
                var data=getData();
                var index=$(this).siblings("a").attr("id");
                data[index].done=$(this).prop("checked");
                saveData(data);
                load();
            })
            $(".clear").on("click",function(){
                var data=getData();
                data.splice(0,data.length);
                saveData(data);
                load();
            })


            function getData(){
                var data=localStorage.getItem("todolist");
                if(data!==null)
                {
                    return JSON.parse(data);
                }
                else{
                    return [];
                }
            }
            
            function saveData(data){
                localStorage.setItem("todolist",JSON.stringify(data));
            }

            function load(){
                var data=getData();
                $("ul,ol").empty();
                var doingCount=0;
                var doneCount=0;
                $.each(data,function(i,e){
                    if(e.done)
                    {
                        doneCount++;
                        $("ol").prepend("<li><input type='checkbox' checked='checked'><p>"+e.title+"</p><a href='javascript:;'' id="+i+">-</a></li>");
                    }
                    else{
                        doingCount++;
                        $("ul").prepend("<li><input type='checkbox'><p>"+e.title+"</p><a href='javascript:;'' id="+i+">-</a></li>");
                    }
                })
                $(".doingcount").text(doingCount);
                $(".donecount").text(doneCount);
            }

        });


    </script>
</body>
</html>

成果展示

输入效果

请添加图片描述

内容展示

请添加图片描述

选框勾选,将未完成变成已完成

请添加图片描述

删除某个任务

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值