用Html+Javascript实现table表格的单选与多选

一、效果图
1.在这里插入图片描述
2.在这里插入图片描述

二、代码(可直接复制)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <table class="multi-table" cellspacing="0" border>
            <thead>
                <tr>
                    <th> <input id="js-all-checkbox" type="checkbox" onclick="checkAll(this)"></th>
                    <th>序号</th>
                    <th>操作人</th>
                    <th>手机号码</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td><input type="checkbox" name="select" value="1" oninput="clickCheckbox()"></td>
                    <td>1</td>
                    <td>张三</td>
                    <td>15278126625</td>
                </tr>
                <tr>
                    <td> <input type="checkbox" name="select" value="2" oninput="clickCheckbox()"></td>
                    <td>2</td>
                    <td>李四</td>
                    <td>15278126625</td>
                </tr>
                <tr>
                    <td><input type="checkbox" name="select" value="3" onclick="clickCheckbox()"></td>
                    <td>3</td>
                    <td>王五</td>
                    <td>15278126625</td>
                </tr>
            </tbody>
        </table>

    <h3>当前选中的是: <span id="js-check-text"></span></h3>
</body>

</html>



<script>
    let checkValues = [];

    function clickCheckbox(e) {
      
      
        //拿到所有选择的dom复选框
        let checkDomArr = document.querySelectorAll('.multi-table tbody input[type=checkbox]:checked');
        //拿到所有选择的dom复选框的值
        checkValues = [];
        for (let i = 0, len = checkDomArr.length; i < len; i++) {
      
      
            var checkobj = {
      
      }
            checkobj.id = checkDomArr[i].parentNode.parentNode.children[1].innerHTML
            checkobj.name = checkDomArr[i].parentNode.parentNode.children[2].innerHTML
            checkobj.age = checkDomArr[i].parentNode.parentNode.children[3].innerHTML
            checkValues.push(checkobj);
        }
        //更新当前选中的文本值
        updateText();
        //拿到所有的单选框dom
        let allCheckDomArr = document.querySelectorAll('.multi-table tbody input[type=checkbox]');
        console.log(allCheckDomArr, 'allcheckdom---------')
        //拿到复选框dom
        let allCheckbox = document.getElementById('js-all-checkbox');
        //遍历所有的单选框
        for (let i = 0, len = allCheckDomArr.length; i < len; i++) {
      
      
            //如果有一个单选框的check值为false,复选框都不能为true
            if (!allCheckDomArr[i].checked) {
      
      
                if (allCheckbox.checked) allCheckbox.checked = false;
                break;
            } else if (i === len - 1) {
      
      
                //否则 遍历到i=len-1的时候(即最后一项单选框了),任然不存在上种情况,说明单选框全部选中,此时复选框的checked值为true
                document.getElementById('js-all-checkbox').checked = true;
                return;
            }
        }
    }

    //复选功能
    function checkAll(current) {
      
      
        console.log(current, 'current-----------')
        //拿到所有的单选框
        let allCheckDomArr = document.querySelectorAll('.multi-table tbody input[type=checkbox]');
        //点击之后,如果复选框的checked值为false,说明没点击时为true,即是勾选状态,此时所有的单选框接下来应该为false
        if (!current.checked) {
      
       // 点击的时候, 状态已经修改, 所以没选中的时候状态时true
            checkValues = [];
            //遍历所有的单选框
            for (let i = 0, len = allCheckDomArr.length; i < len; i++) {
      
      
                //拿到当前遍历的单选框的checked值
                let checkStatus = allCheckDomArr[i].checked;
                //若为true(即选中状态),置为false
                if (checkStatus) allCheckDomArr[i].checked = false;
            }
        } else {
      
      
            //同理
            //如果复选框为true,那么所有的单选框都应该被勾选
            checkValues = [];
            for (let i = 0, len = allCheckDomArr.length; i < len; i++) {
      
      
                let checkStatus = allCheckDomArr[i].checked;
                if (!checkStatus) allCheckDomArr[i].checked = true;
                var checkobj = {
      
      }
                checkobj.id = allCheckDomArr[i].parentNode.parentNode.children[1].innerHTML
                checkobj.name = allCheckDomArr[i].parentNode.parentNode.children[2].innerHTML
                checkobj.age = allCheckDomArr[i].parentNode.parentNode.children[3].innerHTML
                checkValues.push(checkobj);
            }
        }
        //更新当前选中的文本值
        updateText();
    }

    function updateText() {
      
      
        document.getElementById('js-check-text').innerHTML = JSON.stringify(checkValues);
    }
</script>

猜你喜欢

转载自blog.csdn.net/qq_45791799/article/details/124589902