【jQuery】todoList的实现教程

作品需要用到的知识

  • jQuery
  • html
  • js
  • css

作品的功能

  • 对todoList的添加,删除,修改查找操作
  • 添加时候记录当前时间
  • 使用本地存储对数据进行保存

页面结构

<!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>todoList</title>
    <script src="./jquery-3.6.0.js"></script>
    <link rel="stylesheet" href="./style.css">
    <link rel="stylesheet" href="./new/bootstrap.min.css">
    <script src="./new/bootstrap.min.js"></script>
    <script src="./new/popper.min.js"></script>
</head>

<body style="background-color: rgb(255, 228, 233);">
    <div class="container">
        <div class="header">
            <div class="hander_container">
                <h1>千里之行 始于足下</h1>
                <div class="hander_container_date">
                    6月20星期一
                </div>
            </div>
            <div class="hander_search">
                <input class="hander_search_body" type="text" placeholder="添加或搜索事项" autofocus="autofocus">
                <div class="search_button">
                    <div class="search_plus">
                        <img class="search_plus_img1" src="./image/plus.png" style="width:30px;height:30px">
                    </div>
                    <div class="search_look">
                        <a href="#gain"><img class="search_plus_img2" src="./image/search.png" style="width:30px;height:30px"></a>
                        
                    </div>
                </div>
            </div>
        </div>
        <br>
        <div class="boundary" style="background-color: #bddd22;">
            待办
        </div>
        <br>
        <div class="todolist_area">
            <!-- <div class="todolist">
                <div class="todolist_icon">
                    <img src="./image/round_check.png" style="width:40px;height:40px">
                </div>
                <div class="todolist_content">
                    去火星旅游
                </div>
                <div class="todolist_time">
                    2022/6/20/21:50:29
                </div>
                <div class="todolist_edit">
                    <img src="./image/edit.png" style="width:33px;height:33px">
                </div>
                <div class="todolist_delete">
                    <img src="./image/delete.png" style="width:40px;height:40px">
                </div>
            </div> -->
        </div>
        <div class="boundary" style="background: #426666;">
            已完成
        </div>
        <div class="donelist_area">
            <!-- <div class="todolist">
                <div class="todolist_icon">
                    <img src="./image/round_checked.png" style="width:40px;height:40px">
                </div>
                <div class="todolist_content">
                    睡午觉
                </div>
                <div class="todolist_time">
                    2022/6/20/12:30:22
                </div>
                <div class="todolist_edit">
                    <img src="./image/edit.png" style="width:33px;height:33px">
                </div>
                <div class="todolist_delete">
                    <img src="./image/delete.png" style="width:40px;height:40px">
                </div>
            </div> -->
        </div>
    </div>
    <div class="example">
        <div class="todolist">
            <div class="todolist_icon">
                <img src="./image/round_check.png" style="width:40px;height:40px">
            </div>
            <div class="todolist_content">
                去火星旅游
            </div>
            <div class="todolist_time">

            </div>
            <button type="button" class="btn todolist_edit" data-bs-toggle="modal" data-bs-target="#myModal">
                <img src="./image/edit.png" width="30px" ,height="30px">
            </button>
            <!-- 模态框 -->
            <div class="modal" id="myModal">
                <div class="modal-dialog">
                    <div class="modal-content">

                        <!-- 模态框头部 -->
                        <div class="modal-header">
                            <h4 class="modal-title">更换一个名字</h4>
                            <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                        </div>

                        <!-- 模态框内容 -->
                        <div class="modal-body">
                            <div class="modal_body_div">
                                <div>名字:</div>
                                <input type="text" placeholder="新的名字">
                            </div>
                        </div>

                        <!-- 模态框底部 -->
                        <div class="modal-footer">
                            <button type="button" class="btn btn-primary my_button">保存</button>
                        </div>

                    </div>
                </div>
            </div>
            <!-- <div class="todolist_edit">
                <img src="./image/edit.png" style="width:33px;height:33px">
            </div> -->
            <div class="todolist_delete">
                <img src="./image/delete.png" style="width:40px;height:40px">
            </div>
        </div>
    </div>

    <script src="./jq.js"></script>
</body>

</html>

jq内容

var recordDateArr;
if (localStorage.length == 0) {
    recordDateArr = new Array();
} else {
    recordDateArr = JSON.parse(localStorage.getItem('recordName'));
}
write();
//向本地写
function write() {
    $(".search_plus_img1").click(function () {
        let searchInput = $(".hander_search_body").val(); //获取到搜索框中的值
        let flag = false;
        if (searchInput.trim() != '' && !dedup(searchInput, flag)) {
            var mydate = new Date;
            let itemObj = {
                'name': searchInput,
                'done': false,
                'time': mydate.getFullYear() + "/" + (mydate.getMonth() + 1) + "/" + mydate.getDate() + "/" + mydate.getHours() + ":" + mydate.getMinutes() + ":" + mydate.getSeconds()
            }
            recordDateArr.push(itemObj);
            localStorage.setItem('recordName', JSON.stringify(recordDateArr));
            location.reload(true);
        }
    });
}
$(".search_look").click(function () {
    let inputContent = document.querySelector('.hander_search_body').value;
    let allContents = document.querySelectorAll(".container .todolist_content");
    if (inputContent == '') return
    for (let i = 0; i < allContents.length; i++) {
        if (allContents[i].innerText == inputContent) {
            alert(' 已找此任务!!!');
            $(allContents[i]).parent().css("backgroundColor", "#63071c");
            $(allContents[i]).parent().attr("id", "gain");
            setTimeout(restart, 2000);

            function restart() {
                $(allContents[i]).parent().css("backgroundColor", "rgb(255, 228, 233)");
                $(allContents[i]).parent().attr("id", "");
            }
        }
    }

});
//数组去重
function dedup(value, flag) {
    for (let i = 0; i < recordDateArr.length; i++) {
        if (value == recordDateArr[i].name) {
            flag = true;
            alert('该数据重复,不能再次添加!!');
            break;
        }
    }
    return flag;
}
//点击添加或者搜索,输入框中的值设为空
$(".search_plus").click(function clear() {
    $(".hander_search_body").val(null);
});
$(".search_look").click(function clear() {
    $(".hander_search_body").val(null);
});
read();
//从本地读
function read() {
    for (let i = 0; i < recordDateArr.length; i++) {
        let arrName = recordDateArr[i].name; //本地获取第i个元素的name
        let arrTime = recordDateArr[i].time; //本地获取第i个元素的time
        let arrDone = recordDateArr[i].done; //本地获取第i个元素的done
        let exampleDiv = $(".example .todolist").clone(true); //获取模板节点并复制
        exampleDiv.children(".todolist_content").text(arrName); //设置复制后的name
        exampleDiv.children(".todolist_time").text(arrTime); //设置复制后的time
        if (arrDone) {
            exampleDiv.children(".todolist_icon").children("img").attr("src", "./image/round_checked.png");
            $(".donelist_area").prepend(exampleDiv); //添加到已做模块
        } else {
            exampleDiv.children(".todolist_icon").children("img").attr("src", "./image/round_check.png");
            $(".todolist_area").prepend(exampleDiv); //添加到未做模块
        }
        // editClick(exampleDiv);
    }
    doneClick();
    deledeClick();
    editClick();
}

// 点击事件 recordDateArr
function doneClick() {
    let displayIconArr = $(".container .todolist .todolist_icon img");
    let displayTextArr = $(".container .todolist .todolist_content");
    for (let i = 0; i < displayIconArr.length; i++) {
        displayIconArr[i].addEventListener('click', function () {
            for (let j = 0; j < recordDateArr.length; j++) {
                if (displayTextArr[i].innerText == recordDateArr[j].name) {
                    recordDateArr[j].done = !recordDateArr[j].done;
                    localStorage.setItem('recordName', JSON.stringify(recordDateArr));
                    location.reload(true); //强制刷新
                }
            }
        });
    }
}

function deledeClick() {
    let displaydeleteArr = $(".container .todolist_delete img");
    let displayTextArr = $(".container .todolist_content");
    for (let i = 0; i < displaydeleteArr.length; i++) {
        displaydeleteArr[i].addEventListener('click', function () {
            for (let j = 0; j < recordDateArr.length; j++) {
                if (displayTextArr[i].innerText == recordDateArr[j].name) {
                    recordDateArr.splice(j, 1);
                    localStorage.setItem('recordName', JSON.stringify(recordDateArr));
                    location.reload(true); //强制刷新
                }
            }
        });
    }
}

// 修改函数
function editClick(e) {
    var indexName;
    e.get(0).querySelector('.todolist_edit').addEventListener('click', function () {
        indexName = this.querySelector('.todolist_content');
        console.log(indexName);
    });
    e.querySelector('.my_button').addEventListener('click', function () {
        for (let i = 0; i < recordDateArr.length; i++) {
            if (recordDateArr[i].name == indexName) {
                recordDateArr[i].name = e.querySelector('.modal_body_div input').value;
            }
        }
        localStorage.setItem('recordName', JSON.stringify(recordDateArr));
    });
}
// function editClick(e, nameA) {
//     //获取按钮添加监听
//     e.find(".btn-primary").click(function addEdit() {
//         for (let j = 0; j < recordDateArr.length; j++) {
//             if (recordDateArr[j].name == nameA && e.find("input").val() != '') {
//                 recordDateArr[j].name = e.find("input").val();
//                 break;
//             }
//         }
//         localStorage.setItem('recordName', JSON.stringify(recordDateArr));
//     });
// }
function editClick() {
    let saveTodoAll = document.querySelectorAll('.container .todolist');
    for (let i = 0; i < saveTodoAll.length; i++) {
        var indexName; //获取点击按钮对应那个词条的name值
        saveTodoAll[i].querySelector('.todolist_edit').addEventListener('click', function () {
            indexName = this.parentElement.querySelector(".todolist_content").innerText;
            console.log(indexName);
        });
        saveTodoAll[i].querySelector('.my_button').addEventListener('click', function () {
            let inputText = saveTodoAll[i].querySelector('.modal_body_div input').value.trim();
            for (let j = 0; j < recordDateArr.length; j++) {
                if (recordDateArr[j].name == indexName && inputText != '') {
                    console.log('aaa');
                    recordDateArr[j].name = inputText;
                    break;
                }
            }
            localStorage.setItem('recordName', JSON.stringify(recordDateArr));
            location.reload(true); //强制刷新
        });
    }
}
$(window).unload(function () {
    var top = $(window).scrollTop();
    localStorage.setItem('scroll_top', top);
});
$(document).ready(function () {
    var top = $.localStorage.getItem('scroll_top');
    $('html,body').animate({
        scrollTop: top
    }, 100);
});

作品的完整代码:下载链接🔗

作品页面

在这里插入图片描述
已勾选和未勾选的数据分在待办和已完成两个部分
在这里插入图片描述

修改某一个词条的信息
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值