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

前端【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.kler.cn/a/524469.html

相关文章:

  • 【Pandas】pandas Series cummax
  • 第十六届蓝桥杯大赛软件赛(编程类)知识点大纲
  • LangChain的开发流程
  • 【Super Tilemap Editor使用详解】(十三):快捷键指南(Keyboard Shortcuts)
  • 力扣【669. 修剪二叉搜索树】Java题解
  • 【漫话机器学习系列】066.贪心算法(Greedy Algorithms)
  • 深度学习学习笔记(第31周)
  • 线段树 算法
  • PA1记录
  • TiDB 常用命令
  • Java---入门基础篇(上)
  • vue-有关于TS与路由器
  • android wifi 热点名称的默认配置
  • 企业SaaS(软件即服务)行业中AARRR
  • 搭建Spark分布式集群
  • 学习数据结构(2)空间复杂度+顺序表
  • 昆仑万维Java开发面试题及参考答案
  • 【linux三剑客】grep练习题
  • PETSc源码分析: Optimization Solvers
  • VLC-Qt: Qt + libVLC 的开源库
  • 小白一命速通JS中的windowglobal对象
  • Prompt提示词完整案例:让chatGPT成为“书单推荐”的高手
  • Spring项目部署到Docker
  • C# 9.0记录类型:解锁开发效率的魔法密码
  • 17、智能驾驶硬件架构安全设计一般原则
  • Linux学习笔记——用户管理