jQuery实现toDoList

HTML、CSS、JS、jQuery实现toDolist,实现本地存储功能。

展示

在这里插入图片描述

HTML页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>第二个玄学</title>
    <link href="../考核/two.css" rel="stylesheet" />
    <script src="../jquery.min.js"></script>
    <script src="../考核/san.js"></script>
</head>
<body>
    <div class="container">

        <!-- 开始头部部分 -->
        <header>
            <section>
                <div class="first">
                    <label for="title">这玄学的一天天</label>
                    <input type="text" id="title" name="title" placeholder="添加任务" required="required" autocomplete="off">
                    <img src="../img/鼓励.png" id="img">
                </div>
            </section>
        </header>
        <!-- 结束头部部分 -->

        <!-- 开始任务部分 -->
        <section>
            <h3>正在进行 <span id="todocount">0</span></h3>
            <ol id="todolist" class="demo-box"></ol>
            <h3>已经完成 <span id="donecount">0</span></h3>
            <ul id="donelist"></ul>
        </section>
        <!-- 结束任务部分 -->
    </div>
</body>
</html>

CSS页面

body {
    margin: 0;
    padding: 0;
    font-size: 16px;
}
ol,ul {
    padding: 0;
    list-style: none;
}
.container {
    width: 660px;
    height: 660px;
    /* background-color: aqua; */
    margin: 0 auto;
    margin-top: 30px;
    border-radius: 10%;
    border: 2px solid;
}

/* 开始头部 */
header {
    height: 80px;
    /* background-color: brown; */
    border-radius: 20%;
    padding-top: 3px;
    margin-left: 20px;
}
.first {
    margin-top: 30px;
}
section {
    margin: 0 auto;
}
label {
    float: left;
    width: 150px;
    line-height: 50px;
    color: black;
    font-size: 18px;
    cursor: pointer;
    margin-left: 40px;
    font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
}
header input {
    float: right;
    width: 250px;
    height: 24px;
    margin-top: 12px;
    margin-right: 119px;
    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
}
img {
    float: right;
    margin-right: -316px;
    margin-top: 12px;
}
/* 结束头部 */


/* 开始任务部分 */
h3 {
    position: relative;
    margin-left: 60px;
}
span {
    position:absolute;
	top:2px;
	right:60px;
	display:inline-block;
	padding:0 5px;
	height:20px;
	border-radius:30px;
	background:rgba(14,191,234,0.62);
	line-height:22px;
	text-align:center;
	color:#666;
	font-size:14px;
}
li input{
	position:absolute;
	top:2px;
	left:50px;
	width:22px;
	height:22px;
	cursor:pointer;
}
p{
	margin: 0;
	user-select: none;
    margin-left: 40px;
}
li p input{
	top:3px;
	left: 83px;
	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);
    cursor: pointer;
}
ol li{
	cursor:move;
}
ul li{
	border-left: 5px solid rgb(13, 12, 12);
	opacity: 0.5;
}
li a{
	position:absolute;
	top:2px;
	right:55px;
	display:inline-block;
	width:14px;
	height:12px;
	border-radius:14px;
	border:6px double #FFF;
	background:#0ebc77d9;
	line-height:14px;
	text-align:center;
	color:#FFF;
	font-weight:bold;
	font-size:14px;
	cursor:pointer;
}

/* 结束任务部分 */

JS页面

$(function(){
    // alert(11);
    //  按下回车 把完整数据存储到本地存储里面
    // 存储的数据格式 var todolist=[{title:"xxx",done:false}]
    load();
    $("#title").on("keydown",function(event) {
        if(event.keyCode==13) {
           if($(this).val()===""){
            alert("输入操作");
            var data=getDate();
           }else{
            // alert(11);
            // 先读取本地存储原来的数据
            var local=getDate();
            // console.log(local);
            // 把local数组进行更新数据 把最新的数据追加给local数组
            local.push({title: $(this).val(),done:false});//$(this).val表示上方输入的内容
            // 把这个数组local存储给本地存储
            saveDate(local);//方便本地存储数据调用
            // toDoList本地存储数据渲染加载到页面
            load();
            $(this).val("");
           }
        }
    });
    $("#img").on("click",function(event){
        if($("input").val()===""){
            alert("输入nr");
            var data=getDate();
            
        }else{
            
            var local=getDate();
            local.push({title: $(this).val(),done:false});
            saveDate(local);
            load();
            $("input").val("");
            alert(11);
        }
    })

    //删除操作
    $("ol,ul").on("click","a",function(){
        // alert(11);
        // 按照先获取本地存储 
        var data=getDate();
        // 修改数据 
        var index=$(this).attr("id");
        // console.log(index);
        data.splice(index,1);
        saveDate(data);
        load();
    });



    //正在进行和已完成选项操作
    $("ol,ul").on("click","input",function(){
        // alert(11);
        // 先获取本地存储数据
        var data=getDate();
        // 修改数据
        var index=$(this).siblings("a").attr("id");
        // console.log(index);
        data[index].done=$(this).prop("checked");
        // console.log(data);
        saveDate(data);
        load();
    });

    // 修改
    $("ol, ul").on("dblclick", "p", function() {
        var data = getDate();
        var index = $(this).siblings("a").attr("index");
        // 先将p原来的内容获取过来
        var str = $(this).text();
        // 创建一个文本框,直接添加到p里
        $(this).prepend('<input type="text" />');
        // 将原来内容给文本框,并让其为选中状态
        var input = $(this).children();
        input.val(str);
        input.select();
        // 文本框失去焦点,将修改过的文本框的内容给title
        $(input).on("blur", function() {
            data[index].title = input.val();
            saveDate(data);
            load();
        })
            // 按下回车也可以保存修改
            $(input).on("keyup", function(e) {
                if(e.keyCode === 13) {   // 回车ASCII值为13
                // 手动调用点击事件
                this.blur();
                }
            })
        })


    // 读取本地存储的数据
    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();
        // console.log(data);
        // 遍历之前先清空ol里面的元素内容 防止出现两次
        $("ol,ul").empty();
        var todoCount=0;//正在进行的个数
        var doneCount=0;//已经完成的个数
        //遍历这个数据
        $.each(data,function(i,n){
            // console.log(n);
            if(n.done) {
                $("ul").prepend("<li><input type='checkedbox' checked='checked'><p>"+n.title+"</p><a href='javascript:;' id="+i+"></a></li>")
                doneCount++;
            }else{
                $("ol").prepend("<li><input type='checkbox'><p>"+n.title+"</p><a href='javascript:;' id="+i+"></a></li>")
                todoCount++;
            }
        });
        $("#todocount").text(todoCount);
        $("#donecount").text(doneCount);
    }
})

同时记得引入jQuery代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值