【Javascript】入门之操作表格属性(添加,删除,全选与反选)

描述: 点击添加, 输入框的值添加到下方表格中,点击删除按钮,删除所在行的所有内容

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>表格添加删除</title>
    <style>
        table{
            margin-top: 20px;
            text-align: center;
        }
    </style>
</head>
<script>
window.onload = function(){
    // 等页面及资源加载完成后再执行
    // 1. 获取元素 按钮 input table
    var btn = document.getElementsByTagName('button')[0];
    var inps = document.getElementsByTagName('input');
    var table = document.getElementsByTagName('table')[0];
    console.log(btn, inps, table);

    // 2.添加点击事件, 将输入框的值作为一行加入表格中
    btn.onclick = function(){
        // 2.1 获取输入框的值
        var name = inps[0].value;
        var gender = inps[1].value;
        var age = inps[2].value;
        // console.log(name, gender, age);

        // 3.创建行元素
        var tr = document.createElement('tr');
        // 获取行数
        var len = table.tBodies[0].rows.length;
        console.log(len);

        // 创建新元素
        tr.appendChild(createElement('td', len + 1));
        tr.appendChild(createElement('td', name));
        tr.appendChild(createElement('td', gender));
        tr.appendChild(createElement('td', age));
        tr.appendChild(createElement('td', '<button>删除</button>'))

        console.log(tr);

        // 新创建的tr添加到表格体中
        table.tBodies[0].appendChild(tr);

        // 给动态添加的动态按钮添加删除功能
        var del = tr.getElementsByTagName('button')[0];
        console.log(del);

        // 点击删除按钮, 删除整行
        del.onclick = function(){
            // 行和按钮是父子关系
            console.log(this.parentNode.parentNode);
            this.parentNode.parentNode.remove();
        }
    }

    // 给静态页面中的删除按钮添加事件
    var staticdel = table.getElementsByTagName('button');
    console.log(staticdel);

    // 给每一个删除按钮添加点击事件
    for(var i = 0; i<staticdel.length; i++){
        staticdel[i].onclick = function(){
            // 删除此行
            this.parentNode.parentNode.remove();
        }
    }

    // 函数封装---创建元素
    function createElement(ele, con){
        var newEle = document.createElement(ele);
        newEle.innerHTML = con;
        // 设置返回值
        return newEle;
    }
}
</script>
<body>
    <input type="text" placeholder="name" autocomplete="off">
    <input type="text" placeholder="gender" autocomplete="off">
    <input type="text" placeholder="age" autocomplete="off">
    <button>添加</button>
    <br>
    <table border='1' width="500">
        <tHead>
            <th>序号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
            <th>操作</th>
        </tHead>
        <!-- 无数个tBody  只有一个头和一个脚 -->
        <tBody>
            <tr>
                <td>1</td>
                <td>蔡文姬</td>
                <td></td>
                <td>3</td>
                <td><button>删除</button></td>
            </tr>
            <tr>
                <td>2</td>
                <td>亚索</td>
                <td></td>
                <td>38</td>
                <td><button>删除</button></td>
            </tr>
            <tr>
                <td>3</td>
                <td>Jack</td>
                <td></td>
                <td>23</td>
                <td><button>删除</button></td>
            </tr>
        </tBody>
    </table>
</body>
</html>

描述:全选按钮功能的实现与删除选中的行

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>表格操作</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .mt12{
            margin-top: 12px;
        }
        button{
            outline: none;
            border: 1px solid #767676;
            border-radius: 3px;
            width: 83px;
            height: 23px;
            cursor: pointer; 
        }
        #wrap{
            width: 550px;
            height: 550px;
            /* background-color: cadetblue; */
            margin: 20px auto;
            overflow: hidden;
        }
        #wrap #inputpanel{
            width: 504px;
            height: 110px;
            border: 1px solid #eeeeee;
            border-radius: 5px;
            margin:18px 0 30px 8px;
            /* background-color: beige; */
            position: relative;
        }
        #wrap #inputpanel > p{
            margin-left: 10px;
            font: 16px/30px "微软雅黑";
        }
        #wrap #inputpanel > p > input{
            outline: none;
            text-indent: 5px;
        }
        #wrap #inputpanel > button{
            position: absolute;
            right: 10px;
            bottom: 10px;
        }
        #wrap #contentpanel{
            width: 504px;
            height: 100%;
            margin-left: 8px;
            /* border: 1px solid #333; */
        }
        #wrap #contentpanel > button{
            float: right;
            margin: 18px 10px 0 0;
        }
        table > tHead > tr > th > input,
        table > tBody > tr > td > input{
            width: 16px;
            height: 16px;
        }
        table > tBody > tr > td{
            height: 30px;
            text-align: center;
        }
    </style>
</head>
<script>
    window.onload = function(){
        // 1.添加内容到新的行
        // 等待页面及资源加载完成后在执行
        /* 
            点击添加按钮, 将输入框的值作为一行加入表格中

            获取元素: 父元素面板 按钮  input table
        */
        var inputpanel = document.getElementById('inputpanel');
        var contentpanel = document.getElementById('contentpanel');
        // console.log(inputpanel, contentpanel);
        // 获取添加按钮, 输入框的值
        var addbtn = inputpanel.getElementsByTagName('button')[0];
        var inps = inputpanel.getElementsByTagName('input');
        // console.log(addbtn, inps);
        // 获取table
        var table = contentpanel.getElementsByTagName('table')[0];
        // console.log(table);

        // 获取全选按钮和其他所有复选框
        var allCheck = table.tHead.getElementsByTagName('input')[0];
        var check = table.tBodies[0].getElementsByTagName('input');
        // console.log(allCheck, check);

        // 获取删除按钮
        var delbtn = contentpanel.getElementsByTagName('button')[0];
        // console.log(delbtn);

        // 按钮添加点击事件, 将输入框的值作为一行加入表格中
        addbtn.onclick = function(){
            // 获取输入框的值
            var name = inps[0].value;
            var gender = inps[1].checked ? inps[1].value : inps[2].value;
            var age = inps[3].value;
            // console.log(name, gender, age);

            // 创建新的行元素
            var tr = document.createElement('tr');
            // 创建新的列元素并添加到行元素中
            tr.appendChild(createEle('td','<input type ="checkbox">'));
            tr.appendChild(createEle('td', name));
            tr.appendChild(createEle('td', gender));
            tr.appendChild(createEle('td', age));
            // 添加到表格体中
            table.tBodies[0].appendChild(tr);

            // 点击添加一行后, 全选按钮不能被选中
            allCheck.checked = false;

            // 添加的复选框获取事件
            var newCheck = tr.getElementsByTagName('input')[0];
            // console.log(newCheck);
            newCheck.onclick = function(){
                // 如果所有的复选按钮都被选中
                // 需要判断是否每一个按钮都被选中了
                isCheckAll();
            }
        }

        // 点击全选按钮, 如果按钮被选中, 表格体中的每一个复选框都被选中
        // 反之, 每一个复选框都不被选中
      
        // 全选按钮添加点击事件
        allCheck.onclick = function(){
            // console.log(allCheck.checked, check);
            // 所有普通checkbox与全选按钮一样
            for(var i = 0; i < check.length; i++){
                check[i].checked = allCheck.checked;
            }
        }

        // 点击每一个普通的复选按钮, 如果所有的复选按钮都被选中, 全选按钮就要被选中
        // 如果有一个复选按钮没有被选中, 全选按钮直接不被选中
        // 给每一个普通复选框添加点击事件
        for(var j = 0; j < check.length; j++){
            check[j].onclick = function(){
                // 如果所有的复选按钮都被选中
                // 需要判断是否每一个按钮都被选中了
                isCheckAll();
               
            }
        }

        // 函数---判断每一个复选框都被选中
        function isCheckAll(){
            for(var z = 0; z < check.length; z++){
                // console.log(check[z].checked);
                if(check[z].checked == false){
                    allCheck.checked = false;
                    return;
                }
            }
            // 如果整个for循环执行结束代码都没有终止, 则表示所有的按钮都被选中
            allCheck.checked = true;
        }

        // 删除所选行, 点击按钮, 将所选中的行删除
        delbtn.onclick = function(){
            // 判断每一条数据是不是被选中, 如果被选中, 则删除
            // console.log(check);
            for(var k = 0; k < check.length; k++){
                console.log(check[k].checked);
                if(check[k].checked == true){
                    // 移除所有
                    check[k].parentNode.parentNode.remove();
                    // 删除之后, 后面的元素向前进1, k需要多停留一次
                    k--;
                }
            }
            // 删除以后, 全选按钮不被选中
            allCheck.checked = false;
        }
        // 函数---创建元素
        function createEle(ele, con){
            // 创建新元素
            var newEle = document.createElement(ele);
            // 设置内容
            newEle.innerHTML = con;
            // 返回新设置的内容
            return newEle;
        }
    }
</script>
<body>
    <div id="wrap">
        <!-- input panel -->
        <div id="inputpanel">
            <p class="mt12">
                请输入姓名:
                <input type="text">
            </p>
            <p>
                <label for="male">
                    请输入性别:
                    <input type="radio" name="gender" id="male" value="" checked></label>&nbsp;&nbsp;
                <label for="female">
                    <input type="radio" name="gender" id="female" value=""></label>
            </p>
            <p>
                请输入年龄:
                <input type="text">
            </p>
            <button>添加到表格</button>
        </div>

        <!-- table -->
        <div id="contentpanel">
            <table border="1" cellspacing = "0">
                <tHead>
                    <tr>
                        <th width = "100" height = "30">
                            <input type="checkbox">&nbsp;全选
                        </th>
                        <th width = "135" height = "30">姓名</th>
                        <th width = "135" height = "30">性别</th>
                        <th width = "135" height = "30">年龄</th>
                    </tr>
                </tHead>
                <tBody>
                    <tr>
                        <td><input type="checkbox"></td>
                        <td>张无忌</td>
                        <td></td>
                        <td>26</td>
                    </tr>
                    <tr>
                        <td><input type="checkbox"></td>
                        <td>楚雨荨</td>
                        <td></td>
                        <td>16</td>
                    </tr>
                    <tr>
                        <td><input type="checkbox"></td>
                        <td>慕容云海</td>
                        <td></td>
                        <td>20</td>
                    </tr>
                </tBody>
            </table>
            <button>删除所选行</button>
        </div>
    </div>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值