待办事项-JavaScript实现

待办事项-JavaScript 实现

预期效果

在这里插入图片描述

步骤:

  • 创建页面布局--> HTML
  • 更改页面样式--> CSS
  • 内容实现--> JavaScript

HTML部分代码

<!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>Document</title>
    <link rel="stylesheet" href="待办事项.css">
</head>
<body>
    <div id="addDiv">
        <input type="text">
        <button>新建任务</button>
    </div>
    <!-- 任务列表:分两列显示 -->
    <div id="container">
        <!-- 第一列:待办事项 -->
        <div id="todo">
            <h2>待办事项</h2>
            <!-- 先设置一些内容,之后js要组装为同样结构,并且提前查看css样式 -->
            <!-- 一个任务一行显示 -->
            <div class="row">
                <input type="checkbox">
                <span>内容</span>
                <button>删除</button>
            </div>
        </div>
        <!-- 第二列:已完成 -->
        <div id="done">
            <h2>已完成</h2>
        </div>
    </div>
</body>
<script src="待办事项.js"></script>
</html>

CSS部分代码

* {
    /* 设置所有内边距 */
    padding: 0;
    /* 设置所有外边距 */
    margin: 0;
   /* 并排放置两个带边框的框 */
    box-sizing: border-box;
}

#addDiv {
    width: 600px;
    height: 40px;
    /* 弹性布局 */
    display: flex;
    /* 上下间距20px ,水平居中 */
    margin: 20px auto;
    /* 前后不间隔,中间间隔 */
    justify-content: space-between;
}
#addDiv>input {
    width: 79%;
}
#addDiv>button {
    width: 20%;
    background-color: orange;
    color: white;
    border: none;
}
#addDiv>button:active {
    /* 设置伪类标志 */
    background-color: gray;
}

#container {
    display: flex;
    /* 两个子元素一起居中 */
    justify-content: center;
}
#todo {
    width: 300px;
}
#done {
    width: 300px;
}
#todo>h2,
#done>h2 {
    height: 40px;
    background-color: black;
    color: white;
    text-align: center;
    font-size: 20px;
    line-height: 40px;
}
.row {
    height:40px;
    display:flex;
    /* 对齐方式 */
    align-items: center;
}
.row>input {
    margin: 10px;
}
.row>span {
    width: 60%;
}
.row>button {
    width: 45;
    height:30px;
}

JavaScript部分代码

// 新建按钮绑定点击事件
var add = document.querySelector("#addDiv>button");
var addText = document.querySelector("#addDiv>input");
var todo = document.querySelector("#todo");
var done = document.querySelector("#done");
add.onclick = function(){
    // 获取文本框元素可以写在点击事件外,但取值必须在点击事件内
    var addContent = addText.value;
    // 首尾去除空格,如果没有输入内容,不做任何操作
    if(addContent.trim().length == 0) return;
    // 否则,新建任务
    console.log(addContent);
    // 构造一个<div class='row'>
    var row = document.createElement("div");
    row.className = "row";

    // checkbox
    var checkbox = document.createElement("input");
    checkbox.type = "checkbox";
    row.appendChild(checkbox);

    // span
    var span = document.createElement("span");
    span.innerHTML = addContent;
    row.appendChild(span);

    // button
    var button = document.createElement("button");
    button.innerHTML = "删除";
    row.appendChild(button);

    //将构造的div添加到待办div
    todo.appendChild(row);

    // 复选框,绑定点击事件/改变事件,如果选中在已完成,未选中在待办
    checkbox.onchange = function(){
        var target = checkbox.checked ? done : todo;
        target.appendChild(row);
    }

    button.onclick = function(){
        // 按钮点击事件,绑定的元素,应该是同一行的div
        // 不能直接使用row,因为row元素是新建任务时创建的,需要动态取button上一级
        //div row
        var parent = this.parentNode;
        //父级节点删除子节点
        //todo或done
        var grand = parent.parentNode;
        grand.removeChild(parent);
    }
}

结果显示

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值