首页 > 编程语言 >前端——JavaScript练习 做一个todoList

前端——JavaScript练习 做一个todoList

时间:2024-09-18 21:21:58浏览次数:3  
标签:todoList 前端 JavaScript tr tbody rgb var table td

用前端制作一个todoList的表格,实现更新、删除、修改等功能。

涉及几个知识点:

  • 设置最小高度(宽度):
.container{
           min-width: 350px;
           /* 最小宽度 最小不会小于210px */        
}
  •  去掉外轮廓
 outline: none;
  • 去除字符串两端的空白字符(包括空格、制表符、换行符等)
info.value.trim()
  •   previousElementSibling 属性返回指定元素的前一个兄弟元素(相同节点树层中的前一个元素节点)
var target=this.parentElement.previousElementSibling
  •   confirm 询问
                            
    if(confirm("是否删除该事件?")){
                            target.parentElement.removeChild(target)
    }

    最终结果显示:

全部代码如下: 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        .container{
            width: 10%;
            min-width: 350px;
            /* 最小宽度 最小不会小于210px */
            /* background: blanchedalmond; */
            margin: 150px auto;
        }
        .container .addBox{
            display: flex;
        }
        .container .addBox .info{
            width: 80%;
            border: 2px solid burlywood;
            outline: none;
            /* 去掉外轮廓 */
            padding: 5px;
            cursor: pointer;
            border-radius: 10%;
        }
        .container .addBox .botton{
            width: 15%;
            background: rgb(157, 110, 202);
            color: #ffffff;
            padding: 5px;
            border-radius: 10px;
            
        }
        .container .addBox .botton:hover{
            opacity:0.8;
        }

        table{
            margin-top: 15px;
            width: 100%;
            border-collapse: collapse;
        }

        table thead tr{
            font-size: 15px;
            padding: 5px;
            background:rgb(155, 69, 192) ;
            color: #ffffff;
        }

        table tbody tr:nth-child(odd){
            background: rgb(212, 174, 198);
        }

        table tbody tr:nth-child(even){
            background: rgb(208, 174, 220);
        }

        table tbody tr td{
            padding: 5px;
            font-size: 15px;
            text-align: center;
        }
        table tbody tr td input{
            background: none;
            border: rgb(155, 69, 192) 3px solid;
            color: rgb(255, 255, 255);
            border-radius: 3px;
            cursor: pointer;

        }
        table tbody tr td input:hover{
            box-shadow: 1px 2px 1px rgb(233, 230, 216);
        }
        /* table thead tr td{
            text-decoration: line-through;
        } */
    </style>

    <script>
        window.onload=function(){
            // 获取元素
            var botton= document.querySelector(".botton")
            var info= document.querySelector(".info")
            var tbody=document.querySelector("tbody")

            // 表格行的起始位置值是0
            var rowindex=0
            // 当前要修改的行的值
            var updateIndex

            
            // 给add按钮绑定事件
            botton.onclick=function(){

                if(updateIndex){
                    // 修改
                    var trs=document.querySelectorAll("table tbody tr")
                    for(var l=0;l<trs.length;l++){
                        if(trs[l].getAttribute("index")==updateIndex){
                            if(info.value){
                                trs[l].firstElementChild.innerText=info.value
                                info.value=""
                                botton.value="add"
                                updateIndex=undefined
                            }else{
                                alert("不能为空")
                            }

                        }
                    }

                    return
                }

                // console.log(info.value)

                if(info.value.trim()){
                    // trim()消除值前没有用的空格
                // 添加
                //创建元素 document.createElement("标签名称")
                var tr=document.createElement("tr")
                var td_one=document.createElement("td")
                var td_two=document.createElement("td")

                // 获取输入框中的值,innerText内部文字
                td_one.innerText=info.value

                // innerHTML内部结构
                td_two.innerHTML='<input type="button" value="mark" class="mark"><input type="button" value="update" class="update"><input type="button" value="delete" class="del">'

                //td放入tr中  appendChild(元素)
                tr.appendChild(td_one)
                tr.appendChild(td_two)

                // 设置index
                tr.setAttribute("index",rowindex)
                rowindex++

                //tr放入tbody中
                tbody.appendChild(tr)

            // 清空输入框的值 给info.value赋值
                info.value=" "


            // 删除
                var dels=document.querySelectorAll(".del")
               
                for(j=0;j<dels.length;j++){
                    dels[j].onclick=function(){
                        var target=this.parentElement.parentElement
                        if(this.parentElement.previousElementSibling.style.textDecoration=="line-through"){
                        if(confirm("是否删除该事件?")){
                        target.parentElement.removeChild(target)
                        // confirm 询问
                        }else{
                            alert("删除已取消!")
                        }
                    }else{
                        alert("坚持完成,不要半途而废")
                    }
                        
                }
            }
                



            // 中划线
                 var marks=document.querySelectorAll(".mark")
                 for(var i=0;i<marks.length;i++){
                    marks[i].onclick=function(){
                    var target=this.parentElement.previousElementSibling
                    // previousElementSibling 属性返回指定元素的前一个兄弟元素(相同节点树层中的前一个元素节点)
                    if(target.style.textDecoration==""){

                        target.style.textDecoration="line-through"
                        target.style.color="#888"
                
                }else{
                        target.style.textDecoration=""
                        target.style.color="#000"
                    }
                   }
                }

                // 回显
                var updates=document.querySelectorAll(".update")
                for(k=0;k<updates.length;k++){
                    updates[k].onclick=function(){
                        var target=this.parentElement.previousElementSibling
                        if(target.style.textDecoration==""){
                            info.value=target.innerText
                            botton.value="update"
                            updateIndex=this.parentElement.parentElement.getAttribute("index")

                            }else{
                            alert("事件已经完成了")
                        }
                        

                    }
                }



            }

        }
        
    }
    </script>
</head>
<body>
    <div class="container">
        <div class="addBox">
            <input type="text" class="info">
            <input type="button" value="add" class="botton">
        </div>

        <table border="1">
            <thead>
                <tr>
                    <th>事项</th>
                    <th>操作</th>
                </tr>
            </thead>
          
        </table>
    </div>

    
</body>
</html>

标签:todoList,前端,JavaScript,tr,tbody,rgb,var,table,td
From: https://blog.csdn.net/2301_78566776/article/details/142339291

相关文章

  • 【他山之石】优化 JavaScript 的乐趣与价值(下)
    前言继本文的上篇发表之后,没想到反响还挺好,看来大家在JS优化的问题上越来越注重“与国际接轨”了。一起来看本文的下篇,也是干货满满。文章目录6.AvoidlargeobjectsWhattheeffshouldIdoaboutthis?7.Useeval8.Usestrings,carefullyWhattheeffs......
  • 488.中国风中秋节专题网页 大学生期末大作业 Web前端网页制作 html+css+js
    目录一、网页概述二、网页文件 三、网页效果四、代码展示1.html2.CSS3.JS五、总结1.简洁实用2.使用方便3.整体性好4.形象突出5.交互式强六、更多推荐欢迎光临仙女的网页世界!这里有各行各业的Web前端网页制作的案例,样式齐全新颖,并持续更新!感谢CSDN,提供了这......
  • 前端必知必会-Sass变量
    文章目录Sass变量Sass变量范围使用Sass!global总结Sass变量变量是一种存储信息的方式,以后您可以重复使用这些信息。使用Sass,您可以将信息存储在变量中,例如:字符串数字颜色布尔值列表空值Sass使用$符号,后跟名称,来声明变量:Sass变量语法:$variablename:......
  • 前端必知必会-CSS Grid网格
    文章目录CSS网格布局模块网格布局网格元素Display属性网格列网格行网格间隙网格线所有CSS网格属性总结CSS网格布局模块网格布局CSS网格布局模块提供基于网格的布局系统,包含行和列,可让您更轻松地设计网页,而无需使用浮动和定位。网格元素网格布局由一个父元......
  • 解决ZBLOG网站运行中出现"JavaScript加载失败"问题
    当Z-Blog网站运行中出现“JavaScript加载失败”的问题时,可能的原因有几个方面,包括但不限于插件冲突、HTTPS配置问题、CDN问题等。以下是针对这些问题的一些解决方案:1.插件冲突问题描述:某些插件可能与Z-Blog核心或其他插件存在冲突,导致JavaScript无法正常加载。解决......
  • zblog提示“JavaScript加载失败”的原因和解决办法
    当您在使用Z-Blog时遇到“JavaScript加载失败”的提示,这通常表明浏览器在加载某个或某些JavaScript文件时遇到了问题。以下是一些可能的原因及相应的解决方法:1.浏览器版本过低问题描述:使用的浏览器版本过低,不支持某些JavaScript功能。解决方法:升级到最新版本的浏览......
  • 期末前端web大作业——动漫客栈响应式bootstarp(7页) 排版整洁,内容丰富,主题鲜明 (2)
    HTML实例网页代码,本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。⚽精彩专栏推荐......
  • 大学生网页制作期末作业——html+css+javascript+jquery旅游官网6页 html大学生网站开
    ......
  • 微前端架构:实现独立开发、高效管理与灵活集成的关键策略
    1.模块化开发与独立部署微前端架构的核心在于其模块化开发策略,它让每个微前端成为一个独立的业务单元,拥有自主的开发、部署及维护流程。每个微前端聚焦于特定功能,能够灵活采用最适合的技术栈、发布节奏及工作流程。这种高度解耦的设计不仅降低了团队间的依赖,还极大地加速了创新步......
  • JavaScript 中循环数据、改变数据的几种方法
    将数组对象中的属性值取出并组成新的数组letarr=[{name:"张三",age:"1",sex:"男",grade:11},{name:"李四",age:"2",sex:"男",grade:12},{name:"王五",age:"3",sex:"男",gra......