全选案例的实现和思路

179 阅读1分钟
<script>
      //获取DOM元素
      let checkAll = document.querySelector('#checkAll')
      let ck = document.querySelectorAll('.ck')
      let all = document.querySelector('.all')
​
      checkAll.addEventListener('click', function () {
        ck.forEach(function (v, i) {
          let state = checkAll.checked
          v.checked = state
          all.innerHTML = state ? '取消' : '全选'
        })
      })
      ck.forEach(function (v, i) {
        v.addEventListener('click', function () {
          //使用伪类选择器拿到被选中按钮的数量
          let count = document.querySelectorAll('.ck:checked').length
          //判断选中单选复选框的数量等于单选复选框总数量吗?
          if (count === ck.length) {
            //等于就全选
            checkAll.checked = true
            all.innerHTML = '取消'
          } else {
            //不等于就取消全选
            checkAll.checked = false
            all.innerHTML = '全选'
          }
        })
​
      })
    </script>
思路:

全选的核心思路是判断单选复选框的选中状态,遍历每个单选复选框,判断选中状态(checked)是 false还是true,如果有一个是false则把全选按钮的选中状态设置为false,如果都是true则把全选框状态设置为true.

实现方式:

1.实现全选和全不选:

获取DOM元素,为全选按钮添加单击事件,遍历伪数组

把全选复选框的状态赋值个所以的单选复选框

2.实现点击单选复选框全选和不全选 :

遍历伪数组,为每个单选复选框绑定点击事件,

使用伪类选择器拿到被选中按钮数量

let count = document.querySelectorAll('.ck:checked').length
3.判断选中单选复选框的数量等于单选复选框总数量吗?
 if (count === ck.length) {
            //等于就全选
            checkAll.checked = true
            all.innerHTML = '取消'
          } else {
            //不等于就取消全选
            checkAll.checked = false
            all.innerHTML = '全选'
          }

\