前军教程网

中小站长与DIV+CSS网页布局开发技术人员的首选CSS学习平台

Js基础5:全选反选功能

描述:

  1. 默认进来显示"全选",选框未选中
  2. 选择"全选"选框,列表的选框全部选中,文字变成"全不选"
  3. 点击"全不选"选框,列表所有选框取消选中,文字变回"全选"
  4. 点击列表对应的选框,如果全部都选中,触发"全选"选框选中,文字变成"全不选"
  5. 取消任意一个列表选框,逻辑变成没有全选,取消"全选"选框选中,文字变成"全选"
  6. 按钮"反选",选中与列表选框相反的选框,逻辑上遵循上述全选规则

html和css代码

 <!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>
     <style>
        * {
             padding: 0;
             margin: 0;
        }
 
         .wrap {
             width: 300px;
             margin: 100px auto 0;
        }
 
         table {
             border-collapse: collapse;
             border-spacing: 0;
             border: 1px solid #c0c0c0;
             width: 300px;
        }
 
         th,
         td {
             border: 1px solid #d0d0d0;
             color: #404060;
             padding: 10px;
        }
 
         th {
             background-color: #09c;
             font: bold 16px "微软雅黑";
             color: #fff;
        }
 
         td {
             font: 14px "微软雅黑";
        }
 
         td:nth-of-type(1) {
             text-align: center;
        }
 
         tbody tr,
         tfoot tr {
             background-color: #f0f0f0;
        }
 
         tbody tr:hover {
             cursor: pointer;
             background-color: #fafafa;
        }
 
         button {
             width: 50px;
        }
     </style>
 </head>
 
 <body>
 
     <div class="wrap">
         <table>
             <thead>
                 <tr>
                     <th>
                         <input type="checkbox" id="j_cbAll" />
                         <span id="txt">全选</span>
                     </th>
                     <th>菜名</th>
                     <th>饭店</th>
                 </tr>
             </thead>
             <tbody id="j_tb">
                 <tr>
                     <td>
                         <input type="checkbox" />
                     </td>
                     <td>红烧肉</td>
                     <td>好再来</td>
                 </tr>
                 <tr>
                     <td>
                         <input type="checkbox" />
                     </td>
                     <td>西红柿鸡蛋</td>
                     <td>好再来</td>
                 </tr>
                 <tr>
                     <td>
                         <input type="checkbox" />
                     </td>
                     <td>油炸榴莲</td>
                     <td>好再来</td>
                 </tr>
                 <tr>
                     <td>
                         <input type="checkbox" />
                     </td>
                     <td>清蒸助教</td>
                     <td>好再来</td>
                 </tr>
 
             </tbody>
             <tfoot>
                 <tr>
                     <td colspan="5"><button id="rev">反选</button></td>
                 </tr>
             </tfoot>
         </table>
     </div>
 </body>
 
 </html>

JavaScript代码

 //获取全选的这个复选框
 var ckAll = get_id("j_cbAll");
 //获取文字显示span
 var txt = get_id("txt");
 //获取tbody中所有的小复选框
 var cks = get_els("j_tb", "input");
 //点击全选的这个复选框,获取他当前的状态,然后设置tbody中所有复选框的状态
 ckAll.onclick = function () {
     console.log(this.checked);
     for (var i = 0; i < cks.length; i++) {
         cks[i].checked = this.checked;
    }
     //顺便修改文本显示
     txt.innerText = this.checked ? "全不选" : "全选";
 };
 
 //获取tbody中所有的复选框,分别注册点击事件
 for (var i = 0; i < cks.length; i++) {
     /* cks[i].onclick = function () {
              var flag = true; //默认都被选中了
              //判断是否所有的复选框都选中
              for (var j = 0; j < cks.length; j++) {
                  if (!cks[j].checked) {
                      //没选中就进来了
                      flag = false;
                      break;
                  }
              }
              //全选的这个复选框的状态就是flag这个变量的值
              ckAll.checked = flag;
              //记得修改文本显示
              txt.innerText = flag?"全不选":"全选";
          }; */
     cks[i].onclick = fn;
 }
 
 // 反选功能
 // 获取按钮
 var btn = get_id("rev");
 btn.onclick = function () {
     for (var i = 0; i < cks.length; i++) {
         cks[i].checked = !cks[i].checked
    }
     fn();
 }
 
 // 代码复用,函数封装
 function fn() {
     var flag = true; //默认都被选中了
     //判断是否所有的复选框都选中
     for (var j = 0; j < cks.length; j++) {
         if (!cks[j].checked) {
             //没选中就进来了
             flag = false;
             break;
        }
    }
     //全选的这个复选框的状态就是flag这个变量的值
     ckAll.checked = flag;
     //记得修改文本显示
     txt.innerText = flag ? "全不选" : "全选";
 }

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言