HTML学习笔记(6)

利用dom操作实现,对一个表格的增删改查

代码如下:

todolist.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="todolist.css">
    <script src="todolist.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>
            </tbody>
        </table>
    </div>
</body>
</html>

todolist.js

// 获取添加按钮
var btn = document.querySelector(".btn")
console.log(btn)

// 获取输入框
var content = document.querySelector(".content")

// 获取tbbody
var tbody = document.querySelector("tbody")

// 定义标识
var flag = 1

//修改存储的是哪条信息
var targetFlag = 0

// 给添加按钮绑事件
btn.onclick = function(){
    if(btn.value == "修改") {
        var tds = document.querySelectorAll("tbody tr td:nth-child(1)")
        for(var i = 0; i < tds.length; i ++ )
        {
            if(tds[i].getAttribute("index") == targetFlag){
                tds[i].innerHTML = content.value
                content.value=""
                btn.value = "添加"
            }
        }
        return
    }
    var text = content.value.trim() // trim去掉前后的空格
    if(text.length != 0){
        var tr = document.createElement("tr")
        var td1 = document.createElement("td")
        td1.setAttribute("index", flag)
        flag ++;
        td1.innerText = text
        var td2 = document.createElement("td")
        td2.innerHTML = '<input type="button" value="完成" class="finish"><input type="button" value="删除" class="delete"><input type="button" value="修改" class="update"></input>'
        tr.append(td1)
        tr.append(td2)
        tbody.append(tr)
        content.value = "" //去掉输入框内的值
    } else {
        alert("请输入信息")
    }
    // 给完成按钮绑定事件
    var finish = document.getElementsByClassName("finish")
    for(var i = 0; i < finish.length; i ++ ){
        finish[i].onclick = function(){
            var target = this.parentNode.previousElementSibling
            
            if(target.style.textDecoration == "line-through") {
                target.style.textDecoration = "none"
                target.style.color = "#000"
                this.value = "完成"
                this.style.borderColor = "#910000"

                this.style.color = "#910000" 
            } else {
                target.style.textDecoration = "line-through"
                target.style.color = "#888"
                this.value = "恢复"
                this.style.borderColor = "#888"
                this.style.color = "#888"
            }

        }
    }

    var deleteBtn = document.getElementsByClassName("delete")
    for(var i = 0; i < deleteBtn.length; i ++ )
    {
        deleteBtn[i].onclick = function(){
            if(this.parentNode.previousElementSibling.style.textDecoration == "line-through") {
                if(confirm("确定要删除吗?")){
                    var target = this.parentNode.parentNode
                    tbody.removeChild(target)
                }
            } else {
                alert("努力完成吧")
            }
        }
    }

    var update = document.getElementsByClassName("update")
    for(var i = 0; i < update.length; i ++ )
    {
        update[i].onclick = function(){
            var target = this.parentNode.previousElementSibling
            if(target.style.textDecoration == "line-through"){
                alert("已经完成辣,无需修改")
                content.value = ""
                btn.value = "添加"
            } else {
                content.value = target.innerText
                btn.value = "修改"
                targetFlag = target.getAttribute("index")
            }
        }
    }
}


todolist.css

* {
    padding: 0;
    margin: 0;
}

.container {
    width: 25%;
    margin: 150px auto;
    min-width: 200px;
}

.top {
    display: flex;
}

.top .content {
    width: 80%;
    border: 1px solid #910000;
    padding: 5px;
    /* 外轮廓去掉 */
    outline: none;
    border-radius: 5px 0 0 5px;
}

.top .btn {
    width: 20%;
    border: 1px solid #910000;
    background: #910000;
    color: #fff;
    padding: 5px;
    border-radius: 0 5px 5px 0;
    cursor: pointer;
}

.top .btn:hover {
    box-shadow: 1px 1px 3px #910000;
}

table {
    /* 设置表格边框是否合并collapse相邻的单元格共用一个边框  separate */
    border-collapse: collapse;
    width: 100%;
    margin-top: 30px;
    text-align: center;
    border: 1px solid #fff;
}

table thead tr {
    background: #910000;
    color: #fff;
}

table thead tr th {
    padding: 5px;
    font-size: 14px;
}

table tbody tr {
    background: #eee;
    font-size: 13px;
}

table tbody tr td {
    padding: 5px;
}

table tbody tr:nth-child(odd) {
    background: #ddd;
}

table tbody tr td input {
    background: none;
    border: 1px solid #910000;
    padding: 2px 5px;
    font-size: 13px;
    color: #910000;
    /* 鼠标样式 */
    cursor: pointer;
}

table tbody tr td input:hover {
    box-shadow: 1px 1px 3px #910000;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/965397.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

凝思60重置密码

凝思系统重置密码 - 赛博狗尾草 - 博客园 问题描述 凝思系统进入单用户模式&#xff0c;在此模式下&#xff0c;用户可以访问修复错误配置的文件。也可以在此模式下安装显卡驱动&#xff0c;解决和已加载驱动的冲突问题。 适用范围 linx-6.0.60 linx-6.0.80 linx-6.0.100…

MDPI的论文书写

一、作者信息 二、摘要 1、先写背景&#xff0c;将问题放到大背景里面&#xff0c;然后重点说明研究的目的。

2-kafka服务端之延时操作实现原理

文章目录 背景案例延时生产实现原理延时拉取实现原理 总结 背景 上篇我们说到了kafka时间轮是延时操作内部实现的重要数据结构&#xff0c;这篇我们来说下kafka内部的延时操作实现原理。这里我们以延时生产和延时拉取为例说明延时操作的实现原理。 案例 延时生产 我们知道如…

无心剑七绝《深度求索》

七绝深度求索 深研妙理定乾坤 度世玄机启智门 求路千难兼万险 索萦华夏自为尊 2025年2月1日 平水韵十三元平韵 无心剑七绝《深度求索》以平水韵十三元平韵写成&#xff0c;意境深远&#xff0c;气势磅礴。诗中“深研妙理定乾坤”开篇点题&#xff0c;展现出对深奥道理的钻研与探…

C++多级指针图解

AudioResample **pResample 指针的地址图解AudioResample **pResample; // pResample 存储 AudioResample* 的地址 AudioResample *ar *pResample; // ar 现在指向 AudioResample 结构体 pResample → 指向 AudioResample* 的地址 (0x2000)*pResample → 取出 AudioResample…

oracle基础语法

oracle基础语法 1、增删改查1.1查询语句1.2 修改语句1.3 删除表1.4 删除数据1.5 增加数据1.6 创建视图1.7 添加视图字段注释 1、增删改查 oracle与sql server语法上大致相同&#xff0c;但有些细微的不同&#xff0c;以下是我个人记录工作中常用到的一些语法句。 1.1查询语句…

数据库------------

一 mysql ----数据库就相当于一个端口 1. 三层结构 1&#xff09;数据库中 表的本质仍然是文件 1.1 mysql常用数据类型---&#xff08;即 mysql列类型&#xff09; 1&#xff09; 数值类型 2&#xff09; 文本类型 3&#xff09; 二进制数据类型 4&#xff09;日期类型 2. sq…

使用服务器部署DeepSeek-R1模型【详细版】

文章目录 引言deepseek-r1IDE或者终端工具算力平台体验deepseek-r1模型总结 引言 在现代的机器学习和深度学习应用中&#xff0c;模型部署和服务化是每个开发者面临的重要任务。无论是用于智能推荐、自然语言处理还是图像识别&#xff0c;如何高效、稳定地将深度学习模型部署到…

25/2/6 <机器人基础> 运动学中各连杆的变换矩阵求法

变换矩阵 机器人通常包含多个关节和连杆&#xff0c;每个关节和连杆都有自己的局部坐标系。变换矩阵能够将一个点或向量从一个坐标系转换到另一个坐标系&#xff0c;从而实现对机器人各个部件位置和姿态的统一描述 变换矩阵能够将复杂的运动分解为旋转和平移的组合。通过矩阵乘…

CS 与 BS 架构的差异

在数字化的今天&#xff0c;选择软件架构模式对系统的性能、维护、安全和成本都有很大影响。BS架构和CS架构是最常见的两种模式&#xff0c;了解它们的区别和特点对开发人员和企业决策者都很重要。 CS架构最早出现&#xff0c;当时用户直接从主机获取数据。随着客户端和服务端…

Vuex 解析:从 Vue 2 到 Vue 3 的演变与最佳实践

Vuex 是 Vue.js 中的状态管理模式&#xff0c;广泛应用于 Vue 2 和 Vue 3 中&#xff0c;其内部实现存在一些差异。 1. 什么是 Vuex &#xff1f; Vuex 是 Vue.js 官方提供的状态管理库&#xff0c;用于集中管理应用的所有组件的状态。主要是通过一种集中化的方式来管理共享状…

ip属地是手机号还是手机位置?一文理清

在数字化和网络化的今天&#xff0c;IP属地这一概念逐渐成为了人们关注的焦点。特别是在社交媒体和在线平台上&#xff0c;IP属地的显示往往让人联想到用户的地理位置。然而&#xff0c;关于IP属地到底与手机号还是手机位置有关&#xff0c;却存在着不少误解和混淆。本文将深入…

【C语言高级特性】预处理指令(二)

目录 一、取消宏定义&#xff08;#undef&#xff09; 1.1. 详细介绍 1.2. 代码示例 1.3. 使用场景 1.4. 注意事项 二、#line 指令 2.1. 详细介绍 2.2. 代码示例 2.3. 使用场景 2.4. 注意事项 三、#error 和 #warning 指令 3.1. #error 3.2. #warning 3.3 注意事项…

vim-plug的自动安装与基本使用介绍

vim-plug介绍 Vim-plug 是一个轻量级的 Vim 插件管理器&#xff0c;它允许你轻松地管理 Vim 插件的安装、更新和卸载。相较于其他插件管理器&#xff0c;vim-plug 的优点是简单易用&#xff0c;速度较快&#xff0c;而且支持懒加载插件&#xff08;即按需加载&#xff09; 自动…

华为支付-免密支付接入免密代扣说明

免密代扣包括支付并签约以及签约代扣场景。 开发者接入免密支付前需先申请开通签约代扣产品&#xff08;即申请配置免密代扣模板及协议模板ID&#xff09;。 华为支付以模板维度管理每一个代扣扣费服务&#xff0c;主要组成要素如下&#xff1a; 接入免密支付需注意&#x…

AI安全最佳实践:AI云原生开发安全评估矩阵(下)

上篇小李哥带大家一起了解了什么是AI应用云原生开发安全评估矩阵&#xff0c;并且介绍了利用该矩阵如何确定我们云上AI应用的安全评估范围&#xff0c;接下来我们将继续本系列的下篇&#xff0c;基于该安全评估矩阵设计和实施我们系统应具备的安全控制。 优先考虑的安全控制 …

新星杯进化史:个人发起到CSDN官方支持,创作活动的新篇章

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作者&#x1…

jjwt -- Token 生成解析技术指南

引言 JWT&#xff08;JSON Web Token&#xff09;是一种基于JSON的、用于双方之间安全传输信息的简洁的、URL安全的令牌标准。在现代Web应用程序中&#xff0c;JWT作为一种高效且安全的认证机制&#xff0c;被广泛应用于用户身份验证和信息交换场景。本文旨在详细介绍JWT Toke…

第 2 天:创建你的第一个 UE5 C++ 项目!

&#x1f3af; 目标&#xff1a; 掌握 UE5 C 项目的创建流程&#xff0c;了解代码结构&#xff0c;并成功运行第一个 C 类&#xff01; 1️⃣ 创建 UE5 C 项目 在 UE5 中&#xff0c;C 项目可以与蓝图&#xff08;Blueprint&#xff09;结合使用&#xff0c;让游戏逻辑更灵活…

RabbitMQ 从入门到精通:从工作模式到集群部署实战(二)

接上篇&#xff1a;《RabbitMQ 从入门到精通&#xff1a;从工作模式到集群部署实战&#xff08;一&#xff09;》 链接 文章目录 4.安装RabbitMQ Messaging Topology Operator 裸金属环境部署RabbitMQ部署单实例部署集群 4.安装RabbitMQ Messaging Topology Operator 使用 cer…