用js制作表格的新增,修改和删除等功能

最终效果如下

 

要求:

  1. 点击每行后面的修改,能将该行的值回填到下面表单。此时点击表单的保存按钮,将表单内容回填到列表对应的行。

  2. 点击每行后面的删除,能删除这一行。删除前提示是否删除

  3. 如果进来直接填表单,点击表单的保存则新增一行数据到列表中。

  4. 点击表头的复选框,能实现全选,取消任意一行的复选框时,自动取消表头的复选框。如果把表头以外的复选框全选中,则自动勾选上表头的复选框。

  5. 假设复选框选中了3行数据,点击最上面的删除选中按钮,则能删除被勾选的数据,如果一行都没有选中,提示必须选中一行

一.css代码

    <style>
            td{
                text-align: center;
                width: 40px;
            }
            th{
                background-color:  rgb(46, 142, 202);
                width: 40px;
            }
            .b1{
                margin-bottom: 20px;
            }
            .d1{
                display: flex;
                flex-direction: column;
                text-align: center;
            }
            .i1{
                width: 241px;
                height: 25px;
                margin-top: -6px;
            }
            h1{
                margin-top: 80px;
            }
            .i2{
                width: 50px;
                margin-left: 750px;
            }
        </style>

二.html代码

<form>
        <input type="button" class="b1"  value="删除选中" οnclick="delBatch()">
         <table align="center" border="1px solid " cellspacing="0" width="100%">
            <tr>
                <th><input type="checkbox" id="checkAll" οnclick="checkAlls(this)"></th>
                <th>姓名</th>
                <th>年龄</th>
                <th>性别</th>
                <th colspan="2">操作</th>                
            </tr>
            <tr>
                <td ><input type="checkbox" class="t1" οnclick="check()"></td>
                <td>姓名1</td>
                <td>年龄1</td>
                <td>性别1</td>
                <td id="t2"><a href="#" οnclick="update(this)">修改</a></td>
                <td><a href="#" οnclick="deleteRow(this)">删除</a></td>
            </tr>
            <tr>
                <td ><input type="checkbox" class="t1" οnclick="check()"></td>
                <td>姓名2</td>
                <td>年龄2</td>
                <td>性别2</td>
                <td id="t2"><a href="#" οnclick="update(this)">修改</a></td>
                <td><a href="#" οnclick="deleteRow(this)">删除</a></td>
            </tr>
            <tr>
                <td ><input type="checkbox" class="t1" οnclick="check()"></td>
                <td>姓名3</td>
                <td>年龄3</td>
                <td>性别3</td>
                <td id="t2"><a href="#" οnclick="update(this)">修改</a></td>
                <td><a href="#" οnclick="deleteRow(this)">删除</a></td>
            </tr>
            <tr>
                <td ><input type="checkbox" class="t1" οnclick="check()"></td>
                <td>姓名4</td>
                <td>年龄4</td>
                <td>性别4</td>
                <td id="t2"><a href="#" οnclick="update(this)">修改</a></td>
                <td><a href="#" οnclick="deleteRow(this)">删除</a></td>
            </tr>
            <tr>
                <td ><input type="checkbox" class="t1" οnclick="check()"></td>
                <td>姓名5</td>
                <td>年龄5</td>
                <td>性别5</td>
                <td id="t2"><a href="#" οnclick="update(this)">修改</a></td>
                <td><a href="#" οnclick="deleteRow(this)">删除</a></td>
            </tr>
            <tr>
                <td ><input type="checkbox" class="t1" οnclick="check()"></td>
                <td>姓名6</td>
                <td>年龄6</td>
                <td>性别6</td>
                <td id="t2"><a href="#" οnclick="update(this)">修改</a></td>
                <td><a href="#" οnclick="deleteRow(this)">删除</a></td>
            </tr>
            <tr>
                <td ><input type="checkbox" class="t1" οnclick="check()"></td>
                <td>姓名7</td>
                <td>年龄7</td>
                <td>性别7</td>
                <td id="t2"><a href="#" οnclick="update(this)">修改</a></td>
                <td><a href="#" οnclick="deleteRow(this)">删除</a></td>
            </tr>
            <tr>
                <td ><input type="checkbox" class="t1" οnclick="check()"></td>
                <td>姓名8</td>
                <td>年龄8</td>
                <td>性别8</td>
                <td id="t2"><a href="#" οnclick="update(this)" >修改</a></td>
                <td><a href="#" οnclick="deleteRow(this)">删除</a></td>
            </tr>
            <tr>
                <td ><input type="checkbox" class="t1" οnclick="check()"></td>
                <td>姓名9</td>
                <td>年龄9</td>
                <td>性别9</td>
                <td id="t2"><a href="#" οnclick="update(this)">修改</a></td>
                <td><a href="#" οnclick="deleteRow(this)">删除</a></td>
            </tr>
            <tr>
                <td ><input type="checkbox" class="t1" οnclick="check()"></td>
                <td>姓名10</td>
                <td>年龄10</td>
                <td>性别10</td>
                <td id="t2"><a href="#" οnclick="update(this)">修改</a></td>
                <td id="t3"><a href="#" οnclick="deleteRow(this)">删除</a></td>
            </tr>
        </table>
        <div class="d1">
            <h1>新增</h1>
            <p>姓名:<input type="text" id="i3" class="i1"/></p>
            <p>年龄:<input type="text" id="i4" class="i1"/></p>
            <p>性别:<input type="text" id="i5" class="i1"/></p>
            <input type="button" οnclick="save()" value="保存" class="i2"> 
        </div>
    </form>    

三.js代码

1.删除思路:先获取a标签,然后通过a标签获取tr标签,通过tr.remove()方法进行删除。

2.新增思路:获取输入框中的文本,并存入相应的变量中。新建tr标签,获取div中的tbody标签,将tr标签插入tbody中,然后将变量中的值赋给tr对应标签中。

3.修改思路:先获取点击行的文本值,将获取到的值传入输入框中。定义一个全局变量,将获取的文本值传入到全局变量中。将h1标签中的文本由新增改为修改。设置状态,如果是新增状态,则调用新增方法,如果是修改状态,则将修改后的输入框中的值传入到div中,并调用重置方法,将输入框中的值清空,回归新增状态。

注:只有form标签才能调用reset()方法(重置),而table标签不行;

4.复选框全部选中或者全部取消思路:获取a标签并调用checked方法(意味选中),并进行判断,如果为true则全部选中,如果为false则全部取消。

5.如果一个复选框没选中,则全选框也要取消思路:首先判断当前行是否选中,如果当前行没选中,则全部为false,如果当前行选中,则对其他行进行判断,如果其他行中有某行没选中,则为false,如果全部选中,则为true。

6.批量删除:首先获取行标签,然后对复选框进行判断,如果复选框选中,则对其进行删除,如果一行都没选中,则对用户进行提示。

<script>

              // 设置全局变量

                 let checkTr;

        // 获取table标签
        let table=document.getElementById("table");
        
        // 保存
        // 设置状态
        function save(){
            // 新增修改状态
            let status=document.getElementsByTagName("h1")[0].innerText;
            if(status=="新增"){
                add();
            }else{
                // 将表中数据修改
                let name=document.getElementById("i3").value;
                let age=document.getElementById("i4").value;
                let sex=document.getElementById("i5").value;
                checkTr.children[1].innerText=name;
                checkTr.children[2].innerText=age;
                checkTr.children[3].innerText=sex;
                
                // 清空表中数据,回归新增状态
                document.getElementsByTagName("form")[0].reset();
                document.getElementsByTagName("h1")[0].innerText="新增";
                checkTr=null;
            }
        }
        
        // 删除功能
        function deleteRow(a){
            let s=confirm("是否删除?")
            if(s==true){
                let tr=a.parentElement.parentElement
                // 通过tr标签来实现删除,自己删除自己
                tr.remove()
            }
        }
        
        // 新增功能
        function add(){
            let tbody = document.getElementsByTagName("tbody")[0];
            // 获取文本
            let name=document.getElementById("i3").value;
            let age=document.getElementById("i4").value;
            let sex=document.getElementById("i5").value;
            
                // 将tr标签插入到tbody中
                let tr = document.createElement("tr")
                tbody.appendChild(tr)
                            
                // 创建标签
                let td1=document.createElement("td")
                let td2=document.createElement("td")
                let td3=document.createElement("td")
                let td4=document.createElement("td")
                let td5=document.createElement("td")
                let td6=document.createElement("td")
                
                // 在tr中插入td标签
                tr.appendChild(td1)
                tr.appendChild(td2)
                tr.appendChild(td3)
                tr.appendChild(td4)
                tr.appendChild(td5)
                tr.appendChild(td6)
                
                td1.innerHTML='<input type="checkbox" class="t1" οnclick="check()">'
                td2.innerText=name
                td3.innerText=age
                td4.innerText=sex
                td5.innerHTML='<a href="#" οnclick="update(this)">修改</a>'
                td6.innerHTML='<a href="#" οnclick="deleteRow(this)">删除</a>'
                
                // 重置表单
                document.getElementsByTagName("form")[0].reset();
        }
        
        // 修改()
        // 将原表中的数据回显
        function update(a){
        //将a父的父标签传入到checkTr中,也就是将tr标签中的值传入到checkTr中
        checkTr=a.parentElement.parentElement;
            let tds=checkTr.children;
            
            // 将表格中原有文本中的值传入到变量中
            let name=tds[1].innerText;
            let age=tds[2].innerText;
            let sex=tds[3].innerText;
            
            // 将变量中值传入到输入框中
            document.getElementById("i3").value=name;
            document.getElementById("i4").value=age;
            document.getElementById("i5").value=sex;
            
            // 将文本改为修改
            document.getElementsByTagName("h1")[0].innerText="修改";
        }
        
        // 按钮复选框  新增复选框
        function check(){
            // 如果有一个复选框没选中,那么全选框也要取消勾选
            if(!this.checked){
                document.getElementById("checkAll").checked=false;
            }else{
                let rs=true;
                let ck=document.getElementsByClassName("t1");
                for (var i = 0; i < ck.length; i++) {
                    if(ck[i].checked==false){
                        rs=false;
                        break;
                    }
                }
                if(rs==true){
                    document.getElementById("checkAll").checked=true;
                }
            }
        }
        
        // 全部选中或者全部取消
        function checkAlls(e){
            // checked意味是否选中
            if(e.checked){
                // t1全部选中
                // 均为true,否则为false
                let ck=document.getElementsByClassName("t1");
                for (var i = 0; i < ck.length; i++) {
                    ck[i].checked=true;
                }
            }else{
                let ck=document.getElementsByClassName("t1");
                for (var i = 0; i < ck.length; i++) {
                    ck[i].checked=false;
            }
        }
    }
        
        // 批量删除
        function delBatch(){
            let rs=false;
            let ck=document.getElementsByClassName("t1");
            for (var i = 0; i < ck.length; i++) {
                if(ck[i].checked==true){
                    rs=true;
                    break;
                }
            }
            
            // 如果一行都没选中,就对用户进行提示
            if(!rs){
                alert("至少选择一行");
                return;
            }
            
            // 将选中的行进行删除
            for (var i = ck.length-1; i >= 0; i--) {
                if(ck[i].checked==true){
                    ck[i].parentNode.parentNode.remove();
                }
            }
        }
    </script>
  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现表格添加、删除数据并带样式设置的示例代码如下: HTML: ```html <table id="myTable"> <thead> <tr> <th>Name</th> <th>Age</th> <th>Gender</th> <th>Action</th> </tr> </thead> <tbody> <tr> <td>John Smith</td> <td>32</td> <td>Male</td> <td><button onclick="deleteRow(this)">Delete</button></td> </tr> </tbody> </table> <form id="myForm"> <input type="text" name="name" placeholder="Name"> <input type="text" name="age" placeholder="Age"> <select name="gender"> <option value="male">Male</option> <option value="female">Female</option> </select> <button type="submit" onclick="addRow()">Add</button> </form> ``` JavaScript: ```javascript // 添加行 function addRow() { // 获取单数据 const form = document.getElementById("myForm"); const name = form.elements["name"].value; const age = form.elements["age"].value; const gender = form.elements["gender"].value; // 创建新行 const table = document.getElementById("myTable"); const row = table.insertRow(-1); const cell1 = row.insertCell(0); const cell2 = row.insertCell(1); const cell3 = row.insertCell(2); const cell4 = row.insertCell(3); cell1.innerHTML = name; cell2.innerHTML = age; cell3.innerHTML = gender; cell4.innerHTML = '<button onclick="deleteRow(this)">Delete</button>'; // 设置样式 row.style.backgroundColor = "#f2f2f2"; } // 删除行 function deleteRow(btn) { const row = btn.parentNode.parentNode; row.parentNode.removeChild(row); } ``` 以上代码实现了一个简单的表格添加、删除数据并带样式设置的功能。其中 `addRow()` 函数用于添加新行,`deleteRow(btn)` 函数用于删除行。在添加新行时,我们获取单数据,创建新行并插入到表格中,最后设置新行的样式。在删除行时,我们获取要删除的行并从表格中移除。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值