JS实现表格的动态增删改功能

功能:

全选,全不选
删除对应行
修改数量(点修改按钮之前不可更改,点击后此按钮value变确定,数量可改,再点击value变为修改,数量不可改)
增加行(直接在新增的行内输入数据,点击确定按钮后,不可更改)
效果图 :

代码:
增加行的代码我有一部分屏蔽了,那部分是另外一种方法,不过是写死的

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>修改订单</title>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.css" rel="stylesheet">
    <style>
        .container {
            width: 580px;
            margin-top: 10px;
        }

        input[type=text] {
            border: none !important;
            outline: none !important;
            text-align: center;
            /*height: 30px;*/
        }

        input[type=text]:focus {
            border: 1px solid #bbb !important;
            border-radius: 3px;
            text-align: left;
        }

        input[readonly]:focus {
            border: none !important;
            text-align: center;
        }
        select{
            border: none;
            outline: none;
        }
        select:focus{
            border: 1px solid #bbb !important;
            border-radius: 3px;
        }

    </style>
</head>
<body>
<h3 class="text-center">前端参考书</h3>
<table id="table" class="container table table-bordered text-center">
    <tr id="row0">
        <td>
            <input id="all" type="checkbox"> 全选
        </td>
        <td>书名</td>
        <td>价格(元)</td>
        <td>数量</td>
        <td>操作</td>
    </tr>
    <tr>
        <td>
            <input name="ic" type="checkbox">
        </td>
        <td>JavaScript入门与提高</td>
        <td>59.00</td>
        <td><input name="text" type="text" value="12" size="2" readonly="readonly"></td>
        <td>
            <input name="btn_del" class="btn btn-danger" type="button" value="删除" "del(this)">
            <input name="btn_modify" class="btn btn-default" type="button" value="修改" "modify(this)"></td>
    </tr>
    <tr>
        <td>
            <input name="ic" type="checkbox">
        </td>
        <td>精通JavaScript与JQuery</td>
        <td>49.00</td>
        <td><input name="text" type="text" value="5" size="2" readonly></td>
        <td>
            <input name="btn_del" class="btn btn-danger" type="button" value="删除" "del(this)">
            <input name="btn_modify" class="btn btn-default" type="button" value="修改" "modify(this)">
        </td>
    </tr>
    <tr>
        <td>
            <input name="ic" type="checkbox">
        </td>
        <td>Java Web程序设计</td>
        <td>49.80</td>
        <td><input name="text" type="text" value="7" size="2" readonly></td>
        <td>
            <input name="btn_del" class="btn btn-danger" type="button" value="删除" "del(this)">
            <input name="btn_modify" class="btn btn-default" type="button" value="修改" "modify(this)">
        </td>
    </tr>
    <!--<tr>-->
        <!--<td><select name="books" id="">-->
            <!--<option value="JavaScript入门与提高">JavaScript入门与提高</option>-->
            <!--<option value="Java Web程序设计">Java Web程序设计</option>-->
            <!--<option value="精通JavaScript与JQuery">精通JavaScript与JQuery</option>-->
            <!--<option value="锋利的jQuery">锋利的jQuery</option>-->
            <!--<option value="JavaScript王者归来">JavaScript王者归来</option>-->
            <!--<option value="JavaScript权威">JavaScript权威</option>-->
            <!--<option value="jQuery实战">jQuery实战</option>-->
        <!--</select></td>-->
        <!--<td><input class="text-left" type="text" placeholder="价格" size="6"></td>-->
        <!--<td><input class="text-left" type="text" placeholder="数量" size="2"></td>-->
        <!--<td><input class="btn btn-default btn-block" type="button" value="确定" "add()"></td>-->
    <!--</tr>-->
    <tr>
        <td colspan="5">
            <input id="btn_add" class="btn btn-default btn-block" type="button" value="增加订单" "newRow(this)">
        </td>
    </tr>
</table>
<script>
    var all=document.getElementById("all");
    var single=document.getElementsByName("ic");
    var table = document.getElementById("table");
    var btn_add = document.getElementById("btn_add");
    var num;

    /***************复选框功能****************/
    all.function(){
        for(var i=0;i<single.length;i++) {
            single[i].checked = this.checked;
        }
    }

    for(var i=0;i<single.length;i++){
        single[i].function(){
            var flag=true;
            //判断是否所有的复选框都选中
            for(var j=0;j<single.length;j++){
                if(!single[j].checked){
                    flag=false;
                    break;
                }
            }
            //复选框都选中,则全选框也选中
            all.checked=flag;
        }
    }



    //用lastChild获取修改按钮,有前提
    // console.log(table.rows[1].children[3].lastChild);
    /********修改行*********/
    function modify(element) {
        console.log(element.parentElement.previousElementSibling.children[0]);
        console.log(document.getElementById("1"));
        if (element.value == "确定") {
            element.value = "修改";
            element.parentElement.previousElementSibling.children[0].setAttribute("readonly", "readonly");
        } else if (element.value == "修改") {
            element.value = "确定";
            element.parentElement.previousElementSibling.children[0].removeAttribute("readonly");
            element.parentElement.previousElementSibling.children[0].focus();
        }
    }

    /********删除行*********/
    function del(element) {
        //获取所在行数
        var row = element.parentElement.parentElement.rowIndex;
        table.deleteRow(row);
    }

    /********增加行*********/
    //增加某个固定行
    // btn_add.onclick = function () {
    //     var new_row = table.insertRow(1);
    //     new_row.insertCell(0).innerHTML = "JQuery实战";
    //     new_row.insertCell(1).innerHTML = "33.00";
    //     new_row.insertCell(2).innerHTML = "<input name=\"text\" type=\"text\" value=\"3\" size=\"2\" readonly>";
    //     new_row.insertCell(3).innerHTML = "<input name=\"btn_del\" class=\"btn btn-danger\" type=\"button\" value=\"删除\" \"del(this)\">\n" +
    //         "            <input name=\"btn_modify\" class=\"btn btn-default\" type=\"button\" value=\"修改\" \"modify(this)\">";
    // }

    //增加手动输入的一行,写入新数据
    btn_add.function(){
        //新增倒数第二行tr
        var currentRows=table.rows.length;
        var newRow = table.insertRow(currentRows-1);
        // newRow.className="n";
        newRow.insertCell(0).innerHTML="<input name=\"ic\" type=\"checkbox\">";
        newRow.insertCell(1).innerHTML="<select name=\"books\" id=\"\">\n" +
            "            <option value=\"JavaScript入门与提高\">JavaScript入门与提高</option>\n" +
            "            <option value=\"Java Web程序设计\">Java Web程序设计</option>\n" +
            "            <option value=\"精通JavaScript与JQuery\">精通JavaScript与JQuery</option>\n" +
            "            <option value=\"锋利的jQuery\">锋利的jQuery</option>\n" +
            "            <option value=\"JavaScript王者归来\">JavaScript王者归来</option>\n" +
            "            <option value=\"JavaScript权威\">JavaScript权威</option>\n" +
            "            <option value=\"jQuery实战\">jQuery实战</option>\n" +
            "        </select>";
        newRow.insertCell(2).innerHTML="<input class=\"text-left\" type=\"text\" placeholder=\"价格\" size=\"6\">";
        newRow.insertCell(3).innerHTML="<input class=\"text-left\" type=\"text\" placeholder=\"数量\" value='' size=\"2\">";
        newRow.insertCell(4).innerHTML="<input class=\"btn btn-default btn-block\" type=\"button\" value=\"确定\" \"addTr(this.parentElement.parentElement)\">";

        // num=newRow.cells[2].lastChild.value;
    }


    //确定新增行,将新数据读取出来
    function addTr(element){
        //返回的是当前tr
        // console.log(element.cells[2]);
        //必须在给cells[2]设置标签前取出value值,否则被覆盖清空
        var num=element.cells[3].lastChild.value;
        element.cells[1].innerHTML=element.children[1].lastChild.value;
        element.cells[2].innerHTML=element.children[2].lastChild.value;
        element.cells[3].innerHTML="<input class=\"text-left\" type=\"text\" placeholder=\"数量\" size=\"2\">";
        element.cells[3].lastChild.value=num;
        element.cells[4].innerHTML="<input name=\"btn_del\" class=\"btn btn-danger\" type=\"button\" value=\"删除\" \"del(this)\">\n" +
            "            <input name=\"btn_modify\" class=\"btn btn-default\" type=\"button\" value=\"修改\" \"modify(this)\">";
    }


</script>
</body>
</html>
————————————————
版权声明:本文为CSDN博主「Jiang酱~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40758850/article/details/89206563
Last modification:February 4, 2023
如果觉得我的文章对你有用,请随意赞赏