【JavaScript】实现全选和反选功能

html部分(因为是表格,也可以用JS来遍历实现)

<table cellspacing='0'>
        <tr>
            <th>
                <input type="checkbox" id="checkAll">全选 
            </th>
            <th>商品</th>
            <th>价格</th>
        </tr>
        <tr>
            <td>
                <input type="checkbox" class="single">
            </td>
            <td>钢笔</td>
            <td>¥20.00</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox" class="single">
            </td>
            <td>笔记本</td>
            <td>¥5.00</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox" class="single">
            </td>
            <td>折纸</td>
            <td>¥10.00</td>
        </tr>
    </table>

注意:全选框的id名为 checkAll
           小复选框的类名为 single

style部分(太基础不做解释)

<style>
    table,th,tr,td{
        border: 1px solid black;
        text-align: center;
    }
    th{
        background-color: skyblue;
        color: white;
    }
    td{
        background-color: gainsboro;
        color: black;
    }
    th,td{
        padding: 10px;
    }
</style>

此时的效果为
在这里插入图片描述

JS部分

第一步:先实现 点击全选按钮的时候 让全选按钮的状态 与 下边小复选框的状态保持一致
1、先把全选按钮 和 小的复选框获取过来

//全选按钮
 const checkAll = document.querySelector(`#checkAll`)
 //小复选框
 const single = document.querySelectorAll(`.single`)

2、给全选按钮注册一个点击事件

checkAll.addEventListener('click',function(){})

这里可以通过checkAll.checked来查看一下全选按钮选中时和未选中时的状态

console.log(checkAll.checked)

在这里插入图片描述
4、让下边小的复选框的状态 跟 全选按钮的状态 保持一致就可以了
      所以要把这个选中的状态 设置给每一个小的复选框
要遍历得到每一个小复选框

for(let i=0;i<single.length;i++){
	 /*single[i] 就是每一个小的复选框
	 所以要把每一个小复选框的checked 值 设置为全选按钮的checked值*/
	single[i].checked = checkAll.checked
 }

第二步:要实现反选的功能
即拿小的复选框的状态来决定 全选复选框的状态
            当小复选框全都选择的时候,全选框自动勾选
            当有任何一个小复选框没有选择的话,全选框就不会勾选
首先要遍历得到每一个小的复选框

for(let i=0;i<single.length;i++){}

需要给每一个小的复选框 去注册一个点击事件

single[i].addEventListener('click',function(){}

可以通过 :checked 直接拿到选中的复选框

document.querySelectorAll('.single:checked')
//打印看一下
console.log(document.querySelectorAll('.single:checked'));

在这里插入图片描述
什么时候去判断这个结果呢?每点击一个小复选框的时候 都需要去判断一下的
            这里进行判断,当每一个小复选框都勾选的时候就将全选的状态变为true
            如果有任何一个小复选框没选中,全选框的状态就为false

 if(document.querySelectorAll('.single:checked').length == single.length){
 	checkAll.checked = true
 }else{
	//如果有任何一个小复选框没选中,就不能让全选框选中
	checkAll.checked = false
}

在这里插入图片描述

JS完整代码

<script>
	const checkAll = document.querySelector(`#checkAll`)
	const single = document.querySelectorAll(`.single`)
	checkAll.addEventListener('click',function(){
		for(let i=0;i<single.length;i++){
			single[i].checked = checkAll.checked
        }
	})
	for(let i=0;i<single.length;i++){
		single[i].addEventListener('click',function(){
			if(document.querySelectorAll('.single:checked').length == single.length){
				checkAll.checked = true
			}else{
				 checkAll.checked = false
			}
		})
	}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值