zoukankan      html  css  js  c++  java
  • JavaScript 实现全选 / 反选功能

    JavaScript 实现全选 / 反选功能

      版权声明:未经授权,内容严禁转载!  


     构建主体界面

     编写 HTML 代码 和 CSS 代码,设计主题界面

    <style>
        #user {
            width: 500px;
            text-align: center;
        }
    
        #user, #user th, #user td {
            border: 1px solid #000;
            border-collapse: collapse;
        }
    </style>
    
    
    <h1>管理员列表</h1>
    <table id="user">
        <thead>
        <tr>
            <th><input type="checkbox">全选</th>
            <th>管理员ID</th>
            <th>姓名</th>
            <th>操作</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td><input type="checkbox"></td>
            <td>1</td>
            <td>Tom</td>
            <td>删除修改</td>
        </tr>
        <tr>
            <td><input type="checkbox"></td>
            <td>2</td>
            <td>Jayvee</td>
            <td>删除修改</td>
        </tr>
        <tr>
            <td><input type="checkbox"></td>
            <td>3</td>
            <td>Mia</td>
            <td>删除修改</td>
        </tr>
        <tr>
            <td><input type="checkbox"></td>
            <td>4</td>
            <td>Jack</td>
            <td>删除修改</td>
        </tr>
        </tbody>
    </table>
    <button id="reverse" type="button">反向选择</button>
    <button id="del" type="button">删除选定</button>

        

    思路引导

      设计完主体界面,接下来就要编写 JavaScript 脚本实现 全选/反选 功能,如果要单独建立一个新的 js 文件记得要在HTML界面进行导入命令,导入要在HTML界面最后。

      因为浏览器加载页面的时候从上而下,如果将 JavaScript 文件放在 body上面,在浏览器加载 JavaScript 时HTML 文件的各个标签还没有加载,JavaScript中使用的标签会找不到,出现错误!

    实现全选功能

     编写JavaScript脚本代码实现 全选功能

    // 1 .获取所有触发事件的元素:全选 四个复选框 反选 删除
    
    // 全选
    var chbAll = document.querySelector("#user thead tr th:first-child>input");
    // console.log(chbAll);
    // 四个复选框
    var chbs = document.querySelectorAll("#user tbody tr td:first-child>input");
    // console.log(chbs);
    // 反选
    var reverse = document.querySelector("#reverse");
    // console.log(reverse);
    // 删除选定
    var del = document.querySelector("#del");
    // console.log(del);
    
    // 实现全选功能
    // 绑定事件处理函数
    chbAll.onclick = function () {
        //判断全选当前是否被选中
    
        //   第一种方法
        // if (chbAll.checked) {
        //     // 如果选中四个复选框全选中
        //     // 循环四个复选框设置 checked 为选中 true
        //     for (var i = 0; i < chbs.length; i++) {
        //         chbs[i].checked = true;
        //     }
        // }else {
        //     // 如果没选中四个复选框全不选中
        //     // 循环四个复选框设置 checked 为不选中 false
        //     for (var i = 0; i < chbs.length; i++) {
        //         chbs[i].checked = false;
        //     }
        // }
    
        // 第二种方法。
        // 上面方法太冗余,循环设置四个复选框的选中状态和上面全选框一致即可
        // 减少代码,简单!
        for (var i = 0; i < chbs.length; i++) {
            // chbs[i].checked = chbAll.checked;
            // 建议使用 this 关键字,以后万一改掉了 id 名字也不会影响~
            chbs[i].checked = this.checked;
        }
    
    }

       

    实现四个小复选框的功能

    1. 点击其中一个小复选框要判断这四个小的复选框是否全被选中,如果四个全被选中需要将全选按钮勾上。

    2. 如果点击其中一个取消了选中,那么全选按钮就是取消的。

    总结:点击之后要判断这小复选框是被选中还是取消,如果是选中,就要判断这四个是不是全选中,如果全选中则全选框被选中,如果不是则选中自己。如果点击之后是取消选中,则全选框一定是取消选中的。

     
     继续编写 JavaScript 脚本代码,实现四个小复选框功能
    // 为 tbody 中的每一个 chb 绑定事件处理函数
    for (var i = 0; i < chbs.length; i++) {
        chbs[i].onclick = function () {
            // 判断当前chb是选中韩式取消操作
            if (this.checked) {
                // 如果选中,判断是否都是选中
                // (查找tbody中是否有 未被选中的)
                var unchecked = document.querySelector("#user tbody tr td:first-child>input:not(:checked)");
                if (unchecked == null) {
                    // 如果没有,设置全选被选中
                    chbAll.checked = true;
                }
            } else {
                // 如果是取消,则自己取消并且全选也取消
                chbAll.checked = false;
            }
    
    
        }
    }

       

    实现 反向选择 和 删除选定 功能

    编辑 JavaScript 脚本代码实现 反向选择 和 删除选定 功能

    // 反选
    reverse.onclick = function () {
        // 循环 实现反选
        for (var i = 0; i < chbs.length; i++) {
            chbs[i].checked = !chbs[i].checked;
        }
        // 如果选中,判断是否都是选中
        // (查找tbody中是否有 未被选中的)
        var unchecked = document.querySelector("#user tbody tr td:first-child>input:not(:checked)");
        if (unchecked == null) {
            // 如果没有,设置全选被选中
            chbAll.checked = true;
        } else {
            chbAll.checked = false;
        }
    }
    
    
    // 取消选定
    del.onclick = function () {
        var checked = document.querySelectorAll("#user tbody tr td:first-child>input:checked");
        if (checked !== null) {
            for (var i = 0; i < checked.length; i++) {
                checked[i].checked = false;
            }
        }
        if (chbAll.checked) chbAll.checked = false;
    }

       

    完整案例代码

     HTML + CSS

    <style>
        #user {
            width: 500px;
            text-align: center;
        }
    
        #user, #user th, #user td {
            border: 1px solid #000;
            border-collapse: collapse;
        }
    </style>
    
    
    <h1>管理员列表</h1>
    <table id="user">
        <thead>
        <tr>
            <th><input type="checkbox">全选</th>
            <th>管理员ID</th>
            <th>姓名</th>
            <th>操作</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td><input type="checkbox"></td>
            <td>1</td>
            <td>Tom</td>
            <td>删除修改</td>
        </tr>
        <tr>
            <td><input type="checkbox"></td>
            <td>2</td>
            <td>Jayvee</td>
            <td>删除修改</td>
        </tr>
        <tr>
            <td><input type="checkbox"></td>
            <td>3</td>
            <td>Mia</td>
            <td>删除修改</td>
        </tr>
        <tr>
            <td><input type="checkbox"></td>
            <td>4</td>
            <td>Jack</td>
            <td>删除修改</td>
        </tr>
        </tbody>
    </table>
    <button id="reverse" type="button">反向选择</button>
    <button id="del" type="button">删除选定</button>
    
    
    
    <script src="mJS.js"></script>

    JavaScript 脚本

    // 1 .获取所有触发事件的元素:全选 四个复选框 反选 删除
    
    // 全选
    var chbAll = document.querySelector("#user thead tr th:first-child>input");
    // console.log(chbAll);
    // 四个复选框
    var chbs = document.querySelectorAll("#user tbody tr td:first-child>input");
    // console.log(chbs);
    // 反选
    var reverse = document.querySelector("#reverse");
    // console.log(reverse);
    // 删除选定
    var del = document.querySelector("#del");
    // console.log(del);
    
    // 实现全选功能
    // 绑定事件处理函数
    chbAll.onclick = function () {
        //判断全选当前是否被选中
    
        //   第一种方法
        // if (chbAll.checked) {
        //     // 如果选中四个复选框全选中
        //     // 循环四个复选框设置 checked 为选中 true
        //     for (var i = 0; i < chbs.length; i++) {
        //         chbs[i].checked = true;
        //     }
        // }else {
        //     // 如果没选中四个复选框全不选中
        //     // 循环四个复选框设置 checked 为不选中 false
        //     for (var i = 0; i < chbs.length; i++) {
        //         chbs[i].checked = false;
        //     }
        // }
    
        // 第二种方法。
        // 上面方法太冗余,循环设置四个复选框的选中状态和上面全选框一致即可
        // 减少代码,简单!
        for (var i = 0; i < chbs.length; i++) {
            // chbs[i].checked = chbAll.checked;
            // 建议使用 this 关键字,以后万一改掉了 id 名字也不会影响~
            chbs[i].checked = this.checked;
        }
    
    }
    
    // 为 tbody 中的每一个 chb 绑定事件处理函数
    for (var i = 0; i < chbs.length; i++) {
        chbs[i].onclick = function () {
            // 判断当前chb是选中韩式取消操作
            if (this.checked) {
                // 如果选中,判断是否都是选中
                // (查找tbody中是否有 未被选中的)
                var unchecked = document.querySelector("#user tbody tr td:first-child>input:not(:checked)");
                if (unchecked == null) {
                    // 如果没有,设置全选被选中
                    chbAll.checked = true;
                }
            } else {
                // 如果是取消,则自己取消并且全选也取消
                chbAll.checked = false;
            }
    
    
        }
    }
    
    
    // 反选
    reverse.onclick = function () {
        // 循环 实现反选
        for (var i = 0; i < chbs.length; i++) {
            chbs[i].checked = !chbs[i].checked;
        }
        // 如果选中,判断是否都是选中
        // (查找tbody中是否有 未被选中的)
        var unchecked = document.querySelector("#user tbody tr td:first-child>input:not(:checked)");
        if (unchecked == null) {
            // 如果没有,设置全选被选中
            chbAll.checked = true;
        } else {
            chbAll.checked = false;
        }
    }
    
    
    // 取消选定
    del.onclick = function () {
        var checked = document.querySelectorAll("#user tbody tr td:first-child>input:checked");
        if (checked !== null) {
            for (var i = 0; i < checked.length; i++) {
                checked[i].checked = false;
            }
        }
        if (chbAll.checked) chbAll.checked = false;
    }

     结束了,这个案例用在 购物车 还是蛮好的~

  • 相关阅读:
    Python学习札记(十五) 高级特性1 切片
    LeetCode Longest Substring Without Repeating Characters
    Python学习札记(十四) Function4 递归函数 & Hanoi Tower
    single number和变体
    tusen 刷题
    实验室网站
    leetcode 76. Minimum Window Substring
    leetcode 4. Median of Two Sorted Arrays
    leetcode 200. Number of Islands 、694 Number of Distinct Islands 、695. Max Area of Island 、130. Surrounded Regions 、434. Number of Islands II(lintcode) 并查集 、178. Graph Valid Tree(lintcode)
    刷题注意事项
  • 原文地址:https://www.cnblogs.com/wjw1014/p/8999431.html
Copyright © 2011-2022 走看看