怎么用JS实现可以全选,全不选,反选的复选框

用JS怎么实现全选,全不选,还有反选阿(复选框)


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p><input type="checkbox" name="" id="all">全选</p>
    <input type="checkbox" name="" id="">打篮球
    <input type="checkbox" name="" id="">踢足球
    <input type="checkbox" name="" id="">上网
    <input type="checkbox" name="" id="">听音乐
   <p> <button id="but">全选</button>
        <button id='but1'>全不选</button>
        <button id='but2'>反选</button>
</p>
</body>
</html>
<script>
    var mCheck=document.getElementsByTagName('input')
    var mBut=document.getElementById("but")
    var mBut1=document.getElementById("but1")
    var mBut2=document.getElementById("but2")
    var rest=true;
      mCheck[0].onclick=function(){
         if(rest==true){
            for(var i=1;i<mCheck.length;i++){
              mCheck[i].checked=true;
              rest=false;
          }
      
      }else if(rest==false){
            for(var i=1;i<mCheck.length;i++){
              mCheck[i].checked=false;
              rest=true
          }
         }
        }
    mBut.onclick=function(){
            for(var i=1;i<mCheck.length;i++){
              mCheck[i].checked=true;
      }
    }
    mBut1.onclick=function(){
        for(var i=1;i<mCheck.length;i++){
              mCheck[i].checked=false;
          }
    }
    mBut2.onclick=function(){
         if(rest==true){
            for(var i=1;i<mCheck.length;i++){
              mCheck[i].checked=true;
              rest=false;
          }
      
      }else if(rest==false){
            for(var i=1;i<mCheck.length;i++){
              mCheck[i].checked=false;
              rest=true
          }
         }
        }
    
</script>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>全选</title>
<script type="text/javascript">
    window.onload = function() {
        var btn = document.getElementById("all");
        btn.onclick = function() {
            var flag = this.checked;
            var items = document.getElementsByName("ckbx");
            for (var i = 0; i < items.length; i++) {
                items[i].checked = flag;//将所有item的状态设为全选按钮的状态
            }
        }


        var items = document.getElementsByName("ckbx");
        for (var i = 0; i < items.length; i++) {
            items[i].onclick = function() {//对每个item设置点击
                var number = 0;//记录选中的个数
                for (var j = 0; j < items.length; j++) {
                    if (items[j].checked) {
                        number++;
                    }
                }
                document.getElementById("all").checked = (items.length == number);
            }
        }
    }
</script>
</head>
<body>
    <br />
    <input type="checkbox" id="all" />全选/全不选
    <br />
    <input type="checkbox" name="ckbx" />读书
    <input type="checkbox" name="ckbx" />看报
    <input type="checkbox" name="ckbx" />游泳
    <input type="checkbox" name="ckbx" />写字
    <input type="checkbox" name="ckbx" />上课
</body>
</html>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <input type="checkbox" id="checkAll">全选</button>
        <input type="checkbox" class="check-item" name="zs" />张三
        <input type="checkbox" class="check-item" name="ls" />李四
        <input type="checkbox" class="check-item" name="ww" />王五
        <input type="checkbox" class="check-item" name="zl" />赵六
        
        <script type="text/javascript">
            var checkAll = document.getElementById('checkAll')
            var checkArr = document.getElementsByClassName('check-item')
            // 全选/全不选
            checkAll.onclick = function() {
                var checked = this.checked
                for (var i = 0; i < checkArr.length; i++) {
                    checkArr[i].checked = checked
                }
            }
            // 单个选择控制全选是否选中
            for(var i = 0; i < checkArr.length; i++) {
                var num = 0
                checkArr[i].onclick = function() {
                    this.checked ? num++ : num--
                    checkAll.checked = (num === checkArr.length)
                }
            }
        </script>
    </body>
</html>

map()方法配合filter()方法就行了,先filter筛选数据,再用map修改数据的selected属性,这俩方法可以连点

比如:
将选中的改成未选中 data.filter(item => item.selected).map(item => {item.selected = false; return item })
反之:data.filter(item => !item.selected).map(item => {item.selected = true; return item })