表单全选、全不选与反选以及悬浮行背景色

<!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>全选反选</title>
</head>
<style>
  table {
    border: 1px solid;
    margin: auto;
    width: 500px;
  }
  td,
  th {
    text-align: center;
    border: 1px solid;
  }
  div {
    text-align: center;
    margin: 50px;
  }
  /*下方为第二种样式方法专用的over与out样式*/
  .over {
    background-color: pink;
  }
  .out {
    background-color: white;
  }
</style>
<body>
  <table>
    <caption>学生信息表</caption>
    <tr>
      <th><input type="checkbox"></th>
      <th>编号</th>
      <th>姓名</th>
      <th>性别</th>
      <th>操作</th>
    </tr>
    <tr>
      <td><input type="checkbox"></td>
      <td>1</td>
      <td>令狐冲</td>
      <td>男</td>
      <td><a href="javascript:void(0);">删除</a></td>
    </tr>
    <tr>
      <td><input type="checkbox"></td>
      <td>2</td>
      <td>独孤求败</td>
      <td>女</td>
      <td><a href="javascript:void(0);">删除</a></td>
    </tr>
    <tr>
      <td><input type="checkbox"></td>
      <td>3</td>
      <td>白发魔女</td>
      <td>女</td>
      <td><a href="javascript:void(0);">删除</a></td>
    </tr>
    <tr>
      <td><input type="checkbox"></td>
      <td>4</td>
      <td>杨过</td>
      <td>男</td>
      <td><a href="javascript:void(0);">删除</a></td>
    </tr>
  </table>
  <div>
    <div>
      <input type="button" value="全选" id="selectall">
      <input type="button" value="全不选" id="unselectall">
      <input type="button" value="反选" id="selectRev">
    </div>
</body>
<script>
  //在页面加载完后绑定事件
  onload = () => {
    var flag = false;
    var element_input = document.getElementsByTagName("input");
      /*
      分析:
 全选按钮
        获取所有的checkbox:-----全局变量element_input
        遍历checkbox,设置每一个cb的状态为选中,属性:checked为true
      */
    document.getElementById("selectall").onclick = function (event) {
      for (let index = 0; index < element_input.length; index++) {
        const element = element_input[index];
        if (element.type == "checkbox") {
          element.checked = true;
        }
      }
    }
    /*
全不选按钮
    获取所有的checkbox
    遍历所有checkbox,设置每一个cb的状态为非选中状态,属性:checked为false
    */
    document.getElementById("unselectall").onclick = function (event) {
      for (let index = 0; index < element_input.length; index++) {
        const element = element_input[index];
        element.checked = false;
      }
    };
    /*
反选按钮
    获取所有的checkbox
    遍历所有checkbox,设置每一个CB的状态,反向选择,判断属性:true改为fasle,fasle改为true
    */
    document.getElementById("selectRev").onclick = function (event) {
      for (let index = 1; index < element_input.length; index++) {
        const element = element_input[index];
        // if (element.checked == true) {
        //   element.checked = false;
        // } else {
        //   element.checked = true;
        // }
        element.checked = !element.checked;
        arr[index - 1] = element.checked;
      };
      if (arr.includes(true)) {
        element_input[0].checked = true;
      } else {
        element_input[0].checked = false;
      }
    };
    /*    
标题复选框点击全选全不选事件
    首行复选框的功能分析
    4.1、选中,则所有选中
    4.2、非选中,则所有非选中
    获取所有的checkbox
    遍历所有checkbox,设置每一个CB的状态,反向选择,判断属性:true改为fasle,fasle改为true
    遍历除了第一个checkbox的其他checkbox,其中一个被选中则第一个checkbox选中(onclick),并灰色底,所有都不选中则第一个不选中
    */
    element_input[0].onchange = function (event) {
      if (element_input[0].checked == true) {
        for (let index = 1; index < element_input.length; index++) {
          const element = element_input[index];
          element.checked = true;
        }
      } else {
        for (let index = 1; index < element_input.length; index++) {
          const element = element_input[index];
          if (element.type == "checkbox") {
            element.checked = false;
          }
        }
      }
    }
    /*
表体选中(部分选中时)第一个CB自动打勾(自创)
分析:
遍历所有cb;存入array数组
选中行打勾,则第一个CB自动打勾
选中行取消勾,则判断是否所有都已经勾,第一个CB自动取消勾。否则不变
    */
    var arr = new Array();
    for (let i = 1; i < element_input.length; i++) {
      const element = element_input[i];
      if (element.type == "checkbox") {
        element.onchange = function () {
          arr[i - 1] = element.checked;
          if (arr.includes(true)) {
            element_input[0].checked = true;
          } else {
            element_input[0].checked = false;
          }
        }
      }
    }
    /*
鼠标悬浮变颜色
    给所有tr绑定鼠标移到元素之上和移除元素之上事件
    先获取所有tr元素的集合
    集合中添加鼠标悬浮事件
    */
    var trs = document.getElementsByTagName("tr");
    for (let index = 1; index < trs.length; index++) {
      const element = trs[index];
      //移到元素之上的事件
      element.onmouseover = function () {
        //element.style.background = "pink";//第一种方法
        this.className = "over";//第二种方法,但要在body标签上方添加<style>元素标签并编写over的样式
      };
      //移出元素之后的事件
      element.onmouseout = function () {
        //element.style.background = "white"
        this.className = "out";//第二种方法,但要在body标签上方添加<style>元素标签并编写over的样式
      };
    }
  }
</script>
</html>

最终效果:================

 JavaScript经典案例:表单全选,全不选、悬浮行背景色,以及选中行变更标题行复选框状态等等非常经典的案例,用于各位复习和练习用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值