JavaScript实现备忘录的增删改操作

article/2025/6/26 1:15:29

最终实现目标效果:

  1. ​添加任务​:用户输入内容后点击“add”,创建包含任务和操作按钮的新行。每个任务分配唯一index标识(通过flag自增实现)。
  2. 标记完成/未完成​:点击“mark”切换任务文本的中划线样式和颜色。
  3. ​更新任务​:点击“update”将任务内容回填到输入框,进入编辑模式,保存后更新原任务。
  4. ​删除任务​:仅允许删除已标记完成的任务,需二次确认。

备忘录增删改操作

HTML 部分

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>表格增删改查</title><link rel="stylesheet" href="style.css"><script src="javascript.js" defer></script></head>
<body><div class="container"><div class="addbox"><input type="text" class="text"><input type="button" class="add" value="add"></div><table border="1"><thead><tr><td>事项</td><td width="150">操作</td></tr></thead><tbody><!-- <tr><td>学习</td><td><input type="button" class="mark" value="mark"><input type="button" class="update" value="update"><input type="button" class="delete" value="delete"></td></tr><tr><td>学习</td><td><input type="button" class="mark" value="mark"><input type="button" class="update" value="update"><input type="button" class="delete" value="delete"></td></tr><tr><td>学习</td><td><input type="button" class="mark" value="mark"><input type="button" class="update" value="update"><input type="button" class="delete" value="delete"></td></tr> --></tbody></table></div>
</body>
</html>

CSS 部分

*{padding: 0;margin: 0;
}
.container{width: 25%;margin: 100px auto;min-width: 230px;
}.container .addbox{display: flex;/* 一左一右 */justify-content: space-between;align-items: center;
}.container .addbox .text{width: 85%;padding: 6px 10px;border:2px solid #910000;/* 去掉轮廓 */outline: none;/* 圆角 */border-radius: 5px 0px 0px 5px;
}.container .addbox .add{width: 15%;padding: 7.6px 10px;background: #910000;border:0px;color: white;border-radius: 0px 5px 5px 0px;/* 鼠标样式 */cursor: pointer;
}
.container .addbox .add:hover{background: #4f1010;
}
table {width: 100%;margin-top: 10px;/* 设置边框是否合用 */border-collapse: collapse;border:1px solid #fff;
}/* 右侧居中 */
table tr td:nth-child(2) {text-align: center;
}
table thead tr{background: #910000;color: white;font-size: 14px;}
table thead tr td{padding: 4px 5px;font-size: 15px;font-weight: 430;
}
table tbody tr{background: #f7f5f5;
}table tbody tr:nth-child(odd){background: #e4e2e2;
}
table tbody tr td{padding: 3px 5px;font-size: 14px;font-weight: 350;
}table tbody input{/* 鼠标样式 */border-radius: 3px;cursor: pointer;background:none;color: #910000;font-size: 13px;border:1.7px solid #910000;padding: 3px;
}

备忘录样式:
在这里插入图片描述

JavaScript 部分

//创建
var add = document.querySelector(".add")
var text = document.querySelector(".text")
var tbody = document.querySelector("tbody")
var flag = 0
var targetadd.onclick = function () {//修改if(add.value == "update"){var tds = document.querySelectorAll("tbody tr td:nth-child(1)") for(var i = 0;i<tds.length;i++){if(tds[i].getAttribute("index") == target){tds[i].innerText = text.valuetext.value = ""add.value = "add"}}return}//获取输入框里的内容if (text.value.trim()) {//创建一行元素var tr = document.createElement("tr")var td1 = document.createElement("td")var td2 = document.createElement("td")td1.setAttribute("index",flag)flag++td1.innerText = text.value.trim()td2.innerHTML = '<input type="button" value="mark" class="mark"> ' +'<input type="button" value="update" class="update"> '+'<input type="button" value="delete" class="delete"> 'tr.appendChild(td1)tr.appendChild(td2)tbody.appendChild(tr)//给输入框值设置为空text.value = ""} else {alert("请输入内容")}//完成var marks = document.querySelectorAll(".mark")for (var i = 0; i < marks.length; i++) {marks[i].onclick = function () {var mark_td = this.parentElement.previousElementSiblingif (mark_td.style.textDecoration == 'line-through') {mark_td.style.textDecoration = "none"mark_td.style.color = "#000"} else {mark_td.style.textDecoration = "line-through"mark_td.style.color = "#888"}}}//删除var del = document.querySelectorAll(".delete")for (var i = 0; i < del.length; i++) {del[i].onclick = function () {if (this.parentElement.previousElementSibling.style.textDecoration == 'line-through') {if (confirm("确定删除吗?")) {var delete_tr = this.parentElement.parentElementdelete_tr.parentElement.removeChild(delete_tr)}} else {alert("请先完成")}}}//回显var updates = document.querySelectorAll(".update")for (var i = 0; i < updates.length; i++) { updates[i].onclick = function () {var update_td = this.parentElement.previousElementSiblingif(update_td.style.textDecoration == 'line-through'){text.value = ""add.value = "add"alert("已经完成啦")}else{text.value = update_td.innerTextadd.value = "update"target = update_td.getAttribute("index")}}}
}

http://www.hkcw.cn/article/QEUsIAMbGC.shtml

相关文章

从认识AI开始-----卷积神经网络(CNN)

前言 在上一篇文章里&#xff0c;我们手写了多层感知机&#xff0c;细心地小伙伴们可能会发现一个问题&#xff0c;对于MLP&#xff0c;有两个突出的问题&#xff0c;尤其是处理图像任务时&#xff1a; 参数太多&#xff1a;例如一个28*28的图像扁平化为784维后&#xff0c;连…

从“固定“到“流动“:移动充电如何重塑用户体验?

在传统充电模式中&#xff0c;"固定"不仅是技术的特征&#xff0c;更成为用户行为的枷锁——人们需要规划行程、寻找插座、等待电量填满&#xff0c;这种被动适配正在被移动充电技术颠覆。当充电设备从墙面解放&#xff0c;化身可携带的能源胶囊&#xff0c;甚至嵌入…

π0基于自己的数据集微调,convert_libero_data_to_lerobot.py 各种报错的解决方法

π0 github地址 在做&#xff1a;π0基于自己的数据集微调 Fine-Tuning Base Models on Your Own Data 的时候遇到各种报错&#xff0c;记录一下。 推荐教程&#xff1a;π0的微调——如何基于各种开源数据集、以及私有数据集微调通用VLA π0(含我司七月的微调实践及在机械臂上…

在哈佛演讲25岁中国女生发声 签证不确定性影响未来规划

5月30日,哈佛大学毕业典礼上,中国学生蒋雨融身穿中国传统服饰发表了一段动情演讲。25岁的蒋雨融来自中国青岛,获得了哈佛大学国际发展方向的公共行政硕士学位。她提到,特朗普政府威胁遣返学生签证持有者,这给她的未来规划带来了极大的不确定性。蒋雨融表示自己也开始考虑去…

半导体B2B分销中台如何与ERP集成

在半导体B2B分销领域&#xff0c;高效的销售链管理和精准的数据流转是企业竞争力的核心。随着市场需求的快速变化和业务规模的持续扩张&#xff0c;传统的人工下单销售模式已难以满足实时协同、动态定价、库存优化等关键需求。如何将半导体B2B分销中台与企业核心ERP系统深度集成…

普通遥控器竟牵出10亿元大案 27名嫌疑人落网

涉及河南、四川、浙江等16省市,涉案交易金额达10.3亿元。随着最后一名境外逃犯投案,内蒙古自治区鄂尔多斯市杭锦旗这起利用流量计调节流量、篡改数据非法牟利的合同诈骗案成功告破,27名犯罪嫌疑人全部落网。2024年3月,一封匿名举报信打破了平静:某石油工程有限公司通过更改…

CCleaner:高效免费系统清理软件指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;免费系统清理软件是旨在帮助用户清除计算机中的无用文件以优化性能和释放硬盘空间的应用程序。它们通常包含临时文件删除、注册表清理和无用程序卸载等功能。本文将探讨CCleaner等系统清理工具如何通过清理临时…

C语言—扫雷项目

一、扫雷游戏分析和设计 &#xff08;1.1&#xff09;扫雷游戏功能说明 • 使⽤控制台实现经典的扫雷游戏 • 游戏可以通过菜单实现继续玩或者退出游戏 • 扫雷的棋盘是9*9的格⼦ • 默认随机布置10个雷 • 可以排查雷 ◦ 如果位置不是雷&#xff0c;就显⽰周围有⼏个雷 ◦ 如…

[蓝桥杯] 挖矿(CC++双语版)

题目链接 P10904 [蓝桥杯 2024 省 C] 挖矿 - 洛谷 题目理解 我们可以将这道题中矿洞的位置理解成为一个坐标轴&#xff0c;以题目样例绘出坐标轴&#xff1a; 样例&#xff1a; 输入的5为矿洞数量&#xff0c;4为可走的步数。第二行输入是5个矿洞的坐标。输出结果为在要求步数…

【C语言】 —— 预处理详解(下)

【C语言】 —— 预处理详解&#xff08;下&#xff09; 前言七、# 和 \##7.1 # 运算符7.2 ## 运算符 八、命名约定九、# u n d e f undef undef十、命令行定义十一、条件编译11.1、单分支的条件编译11.2、多分支的条件编译11.3、判断是否被定义11.4、嵌套指令 十二、头文件的包…

C/C++ 内存管理深度解析:从内存分布到实践应用(malloc和new,free和delete的对比与使用,定位 new )

一、引言&#xff1a;理解内存管理的核心价值 在系统级编程领域&#xff0c;内存管理是决定程序性能、稳定性和安全性的关键因素。C/C 作为底层开发的主流语言&#xff0c;赋予开发者直接操作内存的能力&#xff0c;却也要求开发者深入理解内存布局与生命周期管理。本文将从内…

VS Studio2022安装教程(保姆级教程)

1.下载 官网下载&#xff1a; Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 (microsoft.com)https://visualstudio.microsoft.com/zh-hans/vs/ 1.点击下载Community2022(社区版),等待下载完成之后,运行安装包&#xff08;VisualstudioSetup.exe&#xff09; 2.等待…

【CSAPP】【attacklab】实验三 Attack lab 详解

前置知识 call 指令 ret 指令 寄存器rip 栈 小端模式 栈向下生长&#xff0c;栈顶在低地址&#xff0c;栈底在高地址 指令寄存器&#xff08;RIP&#xff09;包含下一条将要被执行的指令的逻辑地址。 通常情况下&#xff0c;每取出一条指令后&#xff0c;RIP会自增指向下一…

【C/C++】字符函数和字符串函数

文章目录 前言字符函数和字符串函数1.字符分类函数2.字符转换函数3.strlen的使用和模拟实现3.1 代码演示3.2 strlen返回值3.3 strlen的模拟实现 4.strcpy的使用和模拟实现4.1 代码演示4.2 模拟实现 5.strcat的使用和模拟实现5.1 代码演示5.2 模拟实现 6.strcmp的使用和模拟实现…

C/C++之内存管理

1. 内存分布 我们定义的变量对于电脑来说也叫数据&#xff0c;同时电脑也会把这些数据分为不同的类型&#xff0c;分别是局部数据&#xff0c;静态数据&#xff0c;全局数据&#xff0c;常量数据和动态申请数据。 在 C 中&#xff0c;各类数据存储位置如下&#xff1a; • 局…

C++从入门到实战(十一)详细讲解C/C++语言中内存分布与C与C++内存管理对比

C从入门到实战&#xff08;十一&#xff09;详细讲解C/C语言中内存分布与C与C内存管理对比 前言一、C/C语言中内存分布1.内核空间2.栈3.堆4.数据段5.代码段 二、例题带练巩固C/C语言中内存分布的知识题目讲解题目答案 三、C语言动态内存分配&#xff08;知识回顾&#xff09;3.…

Educational Codeforces Round 175 (C.二分 D.树形结构、dp)

文章目录 2025.3.3C. Limited Repainting(二分)题意思路代码 D. Tree Jumps(树形结构、dp)题意思路代码 2025.3.3 Educational Codeforces Round 175 (Rated for Div. 2) C. Limited Repainting(二分) 题意 给出一个字符串a由“R”B“组成&#xff0c;不同位置对应一个惩罚…

老太突然倒地吓坏路人民警紧急相救 家属感激救命之恩

“谢谢你们帮我父亲‘捡’回一条命,再晚一会儿后果不堪设想!”5月21日,市民刘女士接到民警电话时再次表达了对紧急救援的感激之情。她的父亲76岁,患有阿尔兹海默病,下午扛着锄头出门后一直未归,家人找了3个多小时都没找到。5月19日傍晚6时许,大冶市公安局还地桥派出所接…

53岁男子诱骗侵害幼女被判刑 深挖彻查揭露更多罪行

5月29日,江苏省人民检察院召开新闻发布会,介绍了近年来加强未成年人网络司法保护的工作情况及典型案例。如皋市检察院副检察长卢海琴介绍了一起典型案例,通过深挖彻查,案件从1名被告人追到3名被告人、从1个罪名查到5个罪名、从1起强奸事实挖到19起犯罪事实、从1名被害人增加…

谷歌DeepMind最强手语翻译模型登场 打破沟通障碍

谷歌DeepMind团队于5月27日宣布推出SignGemma,这是其迄今为止最强大的手语翻译模型,能够将手语转化为口语文本。该开源模型计划在今年晚些时候加入Gemma模型家族。SignGemma支持多语言功能,但目前主要针对美国手语(ASL)和英语进行了深度优化,开发者可以自由使用并改进它。…