当前位置: 首页 > news >正文

前端【11】HTML+CSS+jQUery实战项目--实现一个简单的todolist

前端【8】HTML+CSS+javascript实战项目----实现一个简单的待办事项列表 (To-Do List)-CSDN博客 

        学过jQUery可以极大简化js代码的编写,基于之前实现的todolist小demo,了解如何使用 jQuery 来实现常见的动态交互功能。

修改后的js代码

关键点解析

  1. 动态添加元素:通过 append 方法动态添加表格行,并为每一行生成唯一的 index 属性。

  2. 事件委托:使用 on 方法将事件委托给 tbody,确保动态添加的元素也能触发事件。

  3. 样式控制:通过 css 方法动态修改文本和按钮的样式,实现任务完成状态的切换。

  4. 数据回显:点击“修改”按钮时,将任务内容回显到输入框中,方便用户修改。

// 定义标识,用于生成唯一的索引值
var flag = 1;// 存储当前修改的是哪条信息的索引
var targetFlag = 0;// 添加新行/修改    
$(".btn").on("click", function () {// 获取输入框的内容并去除首尾空格var text = $(".content").val().trim();// 如果输入框内容为空,弹出提示if (text.length == 0) {alert("请输入内容");} else {// 如果按钮的值为“修改”,则执行修改逻辑if ($('.btn').val() == "修改") {// 获取所有第一列的td元素var tds = $('tbody tr td:nth-child(1)');// 遍历所有td元素,找到与targetFlag匹配的索引for (var i = 0; i < tds.length; i++) {if (tds.eq(i).attr('index') == targetFlag) {// 修改对应td的文本内容tds.eq(i).text(text);}}// 将按钮的值重置为“添加”$('.btn').val("添加");// 清空输入框内容$(".content").val('');return;}// 使用输入的内容创建新行$("tbody").append('<tr>' +'<td index=' + (flag++) + '>' + text + '</td>' + // 第一列,显示文本内容,并赋予唯一索引'<td>' +'<input type="button" value="完成" class="finish">' + // 完成按钮'<input type="button" value="删除" class="delete">' + // 删除按钮'<input type="button" value="修改" class="update">' + // 修改按钮'</td>' +'</tr>');// 清空输入框内容$(".content").val('');}
});// 完成/恢复按钮点击事件
$("tbody").on("click", ".finish", function () {// 获取当前点击的按钮的上一个兄弟元素(即文本所在的td)var target = $(this).parent().prev();// 如果按钮的值为“恢复”if ($(this).val() == "恢复") {// 将按钮的值改为“完成”,并设置样式$(this).val("完成").css({'color': '#910000','border-color': '#910000'});// 设置文本的样式为未完成状态target.css({'color': '#910000','textDecoration': 'none',});} else {// 将按钮的值改为“恢复”,并设置样式$(this).val("恢复").css({'color': '#888','border-color': '#888'});// 设置文本的样式为完成状态(灰色,带删除线)target.css({'color': '#888','textDecoration': 'line-through',});}
});// 删除按钮点击事件
$("tbody").on("click", ".delete", function () {// 如果前一个按钮的值为“恢复”(即任务已完成)if ($(this).prev().val() == "恢复") {// 弹出确认框,确认是否删除if (confirm('确定要删除吗')) {// 删除当前行的tr元素$(this).parent().parent().remove();}} else {// 如果任务未完成,弹出提示alert("请努力完成!!");}
});// 修改按钮点击事件
$("tbody").on("click", ".update", function () {// 如果前一个按钮的值为“完成”(即任务未完成)if ($(this).prev().prev().val() == "完成") {// 获取当前行的文本内容var text = $(this).parent().prev().text();// 获取当前行的索引值targetFlag = $(this).parent().prev().attr('index');// 将文本内容回显到输入框$('.content').val(text);// 将按钮的值改为“修改”$(".btn").val("修改");} else {// 如果任务已完成,弹出提示alert("已经完成啦不用再改啦");// 清空输入框内容$('.content').val("");}
});

修改后的html代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><link rel="stylesheet" href="css/todolist.css"><script src="js/jQuery.min.js"></script><script src="js/todolist_jquery.js" defer></script>
</head><body><div class="container"><div class="top"><input type="text" class="content"><input type="button" value="添加" class="btn"></div><table border="1"><thead><tr><th>内容</th><th>操作</th></tr></thead><tbody><!-- <tr><td>今天学习</td><td><input type="button" value="完成" class="finish"><input type="button" value="删除" class="delete"><input type="button" value="修改" class="update"></td></tr><tr><td>今天学习</td><td><input type="button" value="完成" class="finish"><input type="button" value="删除" class="delete"><input type="button" value="修改" class="update"></td></tr><tr><td>今天学习</td><td><input type="button" value="完成" class="finish"><input type="button" value="删除" class="delete"><input type="button" value="修改" class="update"></td></tr><tr><td>今天学习</td><td><input type="button" value="完成" class="finish"><input type="button" value="删除" class="delete"><input type="button" value="修改" class="update"></td></tr> --></tbody></table></div>
</body></html>

 至此前端的学习暂时告一段落啦~

http://www.lryc.cn/news/527733.html

相关文章:

  • 2025课题推荐——USBL与DVL数据融合的实时定位系统
  • 滑动窗口详解:解决无重复字符的最长子串问题
  • 第05章 11 动量剖面可视化代码一则
  • MySQL的复制
  • Cpp::IO流(37)
  • 基于OpenCV实现的答题卡自动判卷系统
  • 如何将电脑桌面默认的C盘设置到D盘?详细操作步骤!
  • 二十三种设计模式-享元模式
  • 算法【有依赖的背包】
  • A7. Jenkins Pipeline自动化构建过程,可灵活配置多项目、多模块服务实战
  • 飞牛NAS新增虚拟机功能,如果使用虚拟机网卡直通安装ikuai软路由(如何解决OVS网桥绑定失败以及打开ovs后无法访问飞牛nas等问题)
  • 蓝桥杯例题四
  • 八股——Java基础(四)
  • CVE-2023-38831 漏洞复现:win10 压缩包挂马攻击剖析
  • 【自然语言处理(NLP)】深度循环神经网络(Deep Recurrent Neural Network,DRNN)原理和实现
  • Linux 命令之技巧(Tips for Linux Commands)
  • 【文星索引】搜索引擎项目测试报告
  • 低代码系统-产品架构案例介绍、轻流(九)
  • 二叉树(补充)
  • (DM)达梦数据库基本操作(持续更新)
  • CRM 微服务
  • AI软件外包需要注意什么 外包开发AI软件的关键因素是什么 如何选择AI外包开发语言
  • DBSyncer开源数据同步中间件
  • < OS 有关 > 阿里云 几个小时前 使用密钥替换 SSH 密码认证后, 发现主机正在被“攻击” 分析与应对
  • react-bn-面试
  • 1. Java-MarkDown文件创建-工具类
  • 全连接神经网络(前馈神经网络)
  • 【llm对话系统】什么是 LLM?大语言模型新手入门指南
  • 【Linux】互斥锁、基于阻塞队列、环形队列的生产消费模型、单例线程池
  • 【学术会议征稿】第五届能源、电力与先进热力系统学术会议(EPATS 2025)