作品需要用到的知识
- 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);
});
作品的完整代码:下载链接🔗
作品页面
已勾选和未勾选的数据分在待办和已完成两个部分
修改某一个词条的信息