Web实现表格单选全选与反选操作:JavaScript DOM基础与实例教程

本文详细介绍了如何使用JavaScript的DOMAPI在Web开发中实现表格的全选、反选操作,包括HTML结构构建、JavaScript事件处理和基础DOM知识的应用。
摘要由CSDN通过智能技术生成

🌟 前言

欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍

在这里插入图片描述

Web实现表格单选全选与反选操作:JavaScript DOM基础与实例教程

在Web开发中,处理表格数据时,全选与反选功能是常见的交互需求。本文将通过一个简单的实例,介绍如何使用JavaScript DOM API来实现表格中的全选与反选操作,并讲解相关的JavaScript DOM基础知识。

实现效果

在这里插入图片描述

JavaScript DOM基础

DOM(Document Object Model)是文档对象模型的缩写,它将HTML或XML文档视为树结构,每个节点都是文档的一部分,可以是文档本身、元素、属性或文本内容。JavaScript中的DOM API提供了大量的方法和属性,允许开发者动态地访问和更新文档的内容、结构和样式。

实例:表格全选与反选操作

创建HTML表格结构

首先,我们需要创建一个包含商品信息的表格,并在表头添加一个全选复选框。

<div class="wrap">
    <table>
        <thead>
            <tr>
                <th><input type="checkbox" id="j_cbAll" /></th>
                <th>商品</th>
                <th>价钱</th>
            </tr>
        </thead>
        <tbody id="j_tb">
            <!-- 商品列表 -->
        </tbody>
    </table>
</div>

使用JavaScript实现全选与反选

单选操作
// 获取元素
var j_cbAll = document.getElementById('j_cbAll'); // 全选按钮
 var j_tbs = document.getElementById('j_tb').getElementsByTagName('input'); // 下面所有的复选框
        // 注册事件
        j_cbAll.onclick = function() {
                // this.checked 它可以得到当前复选框的选中状态如果是true 就是选中,如果是false 就是未选中
                console.log(this.checked);
                for (var i = 0; i < j_tbs.length; i++) {
                    j_tbs[i].checked = this.checked;
                }
		}
全选操作

全选操作的目标是当用户点击全选复选框时,所有商品的复选框都应该被选中。

// 获取全选复选框元素
var j_cbAll = document.getElementById('j_cbAll');
// 获取所有商品复选框元素
var j_tbs = document.getElementById('j_tb').getElementsByTagName('input');

// 为全选复选框绑定点击事件
j_cbAll.onclick = function() {
    // 遍历所有商品复选框,设置与全选复选框相同的选中状态
    for (var i = 0; i < j_tbs.length; i++) {
        j_tbs[i].checked = this.checked;
    }
};
反选操作

反选操作的目标是当任何一个商品复选框的状态发生变化时,检查所有复选框的状态,并据此更新全选复选框的选中状态。

// 为每个商品复选框绑定点击事件
for (var i = 0; i < j_tbs.length; i++) {
    j_tbs[i].onclick = function() {
        // 定义一个变量flag来标记是否所有复选框都被选中
        var flag = true;
        // 遍历所有商品复选框,如果发现有未选中的,设置flag为false
        for (var i = 0; i < j_tbs.length; i++) {
            if (!j_tbs[i].checked) {
                flag = false;
                break; // 只要发现一个未选中的,就可以终止循环
            }
        }
        // 根据flag的值更新全选复选框的选中状态
        j_cbAll.checked = flag;
    }
}

全部代码

<!DOCTYPE html>
<html>

<head lang="en">
    <meta charset="UTF-8">
    <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 "微软雅黑";
        }
        
        tbody tr {
            background-color: #f0f0f0;
        }
        
        tbody tr:hover {
            cursor: pointer;
            background-color: #fafafa;
        }
    </style>

</head>

<body>
    <div class="wrap">
        <table>
            <thead>
                <tr>
                    <th>
                        <input type="checkbox" id="j_cbAll" />
                    </th>
                    <th>商品</th>
                    <th>价钱</th>
                </tr>
            </thead>
            <tbody id="j_tb">
                <tr>
                    <td>
                        <input type="checkbox" />
                    </td>
                    <td>iPhone8</td>
                    <td>8000</td>
                </tr>
                <tr>
                    <td>
                        <input type="checkbox" />
                    </td>
                    <td>iPad Pro</td>
                    <td>5000</td>
                </tr>
                <tr>
                    <td>
                        <input type="checkbox" />
                    </td>
                    <td>iPad Air</td>
                    <td>2000</td>
                </tr>
                <tr>
                    <td>
                        <input type="checkbox" />
                    </td>
                    <td>Apple Watch</td>
                    <td>2000</td>
                </tr>

            </tbody>
        </table>
    </div>
    <script>
        // 1. 全选和取消全选做法:  让下面所有复选框的checked属性(选中状态) 跟随 全选按钮即可
        // 获取元素
        var j_cbAll = document.getElementById('j_cbAll'); // 全选按钮
        var j_tbs = document.getElementById('j_tb').getElementsByTagName('input'); // 下面所有的复选框
        // 注册事件
        j_cbAll.onclick = function() {
                // this.checked 它可以得到当前复选框的选中状态如果是true 就是选中,如果是false 就是未选中
                console.log(this.checked);
                for (var i = 0; i < j_tbs.length; i++) {
                    j_tbs[i].checked = this.checked;
                }
            }
            // 2. 下面复选框需要全部选中, 上面全选才能选中做法: 给下面所有复选框绑定点击事件,每次点击,都要循环查看下面所有的复选框是否有没选中的,如果有一个没选中的, 上面全选就不选中。
        for (var i = 0; i < j_tbs.length; i++) {
            j_tbs[i].onclick = function() {
                // flag 控制全选按钮是否选中
                var flag = true;
                // 每次点击下面的复选框都要循环检查者4个小按钮是否全被选中
                for (var i = 0; i < j_tbs.length; i++) {
                    if (!j_tbs[i].checked) {
                        flag = false;
                        break; // 退出for循环 这样可以提高执行效率 因为只要有一个没有选中,剩下的就无需循环判断了
                    }
                }
                j_cbAll.checked = flag;
            }
        }
    </script>
</body>

</html>

结语

通过上述代码,我们实现了表格中的全选与反选功能。这个实例展示了如何使用JavaScript DOM API来操作HTML元素,并响应用户事件。全选与反选功能是表格交互中的基础,掌握这种操作对于开发复杂的数据表格应用至关重要。希望本文能帮助你更好地理解DOM操作,并将其应用到你的Web项目中。

如果对你有帮助,点赞👍、收藏💖、关注🔔是我更新的动力!👋🌟🚀

🎉 往期精彩回顾

浏览器DOM操作基础:禁用右键菜单与阻止文字选中

  • 774阅读 · 29点赞 · 13收藏

缤纷浏览器 —— 一键换肤,个性随心换(H5实现浏览器换肤效果)

  • 424阅读 · 8点赞 · 4收藏

广州5k前端面试题惊呆我!!!(内容太肝,谨慎入内)

  • 612阅读 · 21点赞 · 17收藏

计算机专业学生的成长之路:超越课堂的自我提升策略

  • 730阅读 · 25点赞 · 23收藏

Node.js快速入门:搭建基础Web服务器与实现CRUD及登录功能

  • 818阅读 · 31点赞 · 16收藏

Node.js核心命令与工具:提升开发效率的实用指南

  • 681阅读 · 11点赞 · 18收藏

爆肝五千字!ECMAScript核心概念与现代JavaScript特性全解析

  • 1298阅读 · 25点赞 · 30收藏

打造精美响应式CSS日历:从基础到高级样式

  • 1080阅读 · 14点赞 · 19收藏

Ubuntu系统下C语言开发环境搭建与使用教程

  • 1336阅读 · 35点赞 · 9收藏

Vue 3响应式系统详解:ref、toRefs、reactive及更多

  • 1186阅读 · 23点赞 · 14收藏

爆肝两千字!掌握CSS选择器与响应式设计:从基础到高级应用

  • 1060阅读 · 27点赞 · 28收藏
  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛可可白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值