js实现全选按钮

news2024/11/17 19:49:09

目录

html代码

css代码

js代码

完整代码


html代码

先把整体结构样式写出来

  <table>
        <thead>
            <tr>
                <th class="allCheck">
                    <input type="checkbox" name="" id="checkAll" />
                    <span class="all">全选</span>
                </th>
                <th>商品</th>
                <th>商家</th>
                <th>价格</th>
            </tr>
        </thead>
        <tbody class="goods"></tbody>
        <!-- <tr>
        <td>
          <input type="checkbox" name="check" class="ck" />
        </td>
        <td>华为手机</td>
        <td>华为</td>
        <td>¥5999</td>
      </tr>
      <tr>
        <td>
          <input type="checkbox" name="check" class="ck" />
        </td>
        <td>小米净水器</td>
        <td>小米</td>
        <td>¥2999</td>
      </tr>
      <tr>
        <td>
          <input type="checkbox" name="check" class="ck" />
        </td>
        <td>三星电视</td>
        <td>三星</td>
        <td>¥4999</td>
      </tr> -->
    </table>

css代码

对表格添加样式,使其呈现在页面美观

  <style>
        * {
            margin: 0;
            padding: 0;
        }

        table {
            border-collapse: collapse;
            border-spacing: 0;
            border: 1px solid #c0c0c0;
            width: 500px;
            margin: 100px auto;
            text-align: center;
        }

        th {
            background-color: rgb(255, 0, 0);
            font: bold 16px '微软雅黑';
            color: #fff;
            height: 35px;
        }

        td {
            border: 1px solid #d0d0d0;
            color: #404060;
            padding: 10px;
        }

        .allCheck {
            width: 80px;
        }
    </style>

js代码

首先要先渲染页面,把整体样式通过js呈现在页面上

根据需求写js代码

点击全选按钮 ,其他按钮都被选中

绑定事件,让所有商品状态与全选按钮状态同步

单击每个商品 设置全选按钮状态    

 单击某个商品   所有商品都选中,全选按钮选中,只要有一个未选中全选按钮取消  

要注意:cks本身是伪数组,它身上没有every方法,需要转成真正的数组,才能使用

<script>
        // 定义商品数据
        const goods = [
            {
                id: +new Date(),
                name: '华为手机',
                brand: '华为',
                price: 5999,
                good_status: false,
            },
            {
                id: +new Date(),
                name: '小米净水器',
                brand: '小米',
                price: 2999,
                good_status: true,
            },
            {
                id: +new Date(),
                name: '三星电视',
                brand: '三星',
                price: 4999,
                good_status: false,
            },
        ]
        //1.渲染页面
        function render() {
            let str = ''
            goods.forEach(function (item) {
                str += `
        <tr>
        <td>
          <input type="checkbox" name="check" class="ck"${item.checked ? 'checked' : ''
                    } />
        </td>
        <td>${item.name}</td>
        <td>${item.brand}</td>
        <td>${item.price}</td>
      </tr>
        `
            })
            document.querySelector('tbody').innerHTML = str
        }
        render()
//2.点击全选按钮 其他按钮都被选中
//绑定事件,让所有商品状态与全选按钮状态同步
        const checkAll = document.querySelector('#checkAll')
        const cks = document.querySelectorAll('.ck')//伪数组
        //change 状态发生改变时触发
        checkAll.addEventListener('change', function () {
            const that = this
            cks.forEach(function (item) {
                item.checked = that.checked
            })
        })
//单击每个商品 ,设置全选按钮状态
        cks.forEach(function (item) {
            item.addEventListener('change', function () {
                    // cks本身是伪数组,它身上没有every方法,需要转成真正的数组,才能使用
                checkAll.checked = Array.from(cks).every(function (item) {
                    return item.checked
                })
            })
        })
    </script>

完整代码

<!DOCTYPE html>

<html>
  <head lang="en">
    <meta charset="UTF-8" />
    <title></title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }

      table {
        border-collapse: collapse;
        border-spacing: 0;
        border: 1px solid #c0c0c0;
        width: 500px;
        margin: 100px auto;
        text-align: center;
      }

      th {
        background-color: #f40;
        font: bold 16px '微软雅黑';
        color: #fff;
        height: 35px;
      }

      td {
        border: 1px solid #d0d0d0;
        color: #404060;
        padding: 10px;
      }

      .allCheck {
        width: 80px;
      }
    </style>
  </head>

  <body>
    <table>
      <thead>
        <tr>
          <th class="allCheck">
            <input type="checkbox" name="" id="checkAll" />
            <span class="all">全选</span>
          </th>
          <th>商品</th>
          <th>商家</th>
          <th>价格</th>
        </tr>
      </thead>
      <tbody class="goods"></tbody>
      <!-- <tr>
        <td>
          <input type="checkbox" name="check" class="ck" />
        </td>
        <td>华为手机</td>
        <td>华为</td>
        <td>¥5999</td>
      </tr>
      <tr>
        <td>
          <input type="checkbox" name="check" class="ck" />
        </td>
        <td>小米净水器</td>
        <td>小米</td>
        <td>¥2999</td>
      </tr>
      <tr>
        <td>
          <input type="checkbox" name="check" class="ck" />
        </td>
        <td>三星电视</td>
        <td>三星</td>
        <td>¥4999</td>
      </tr> -->
    </table>
    <script>
      // 定义商品数据
      const goods = [
        {
          id: +new Date(),
          name: '华为手机',
          brand: '华为',
          price: 5999,
          good_status: false,
        },
        {
          id: +new Date(),
          name: '小米净水器',
          brand: '小米',
          price: 2999,
          good_status: true,
        },
        {
          id: +new Date(),
          name: '三星电视',
          brand: '三星',
          price: 4999,
          good_status: false,
        },
      ]
      // 1 基本渲染
      function render() {
        let str = ''
        goods.forEach(function (item) {
          str += `
          <tr>
        <td>
          <input type="checkbox" name="check" class="ck" ${
            item.good_status ? 'checked' : ''
          }/>
        </td>
        <td>${item.name}</td>
        <td>${item.brand}</td>
        <td>¥${item.price}</td>
      </tr>  
          `
        })
        document.querySelector('.goods').innerHTML = str
      }
      render()

      // 2 点击全选 让所有商品 跟着变化
      // 思路:绑定事件 让所有商品状态与全选按钮状态同步
      const checkAll = document.querySelector('#checkAll')
      const cks = document.querySelectorAll('.ck') // 伪数组
      console.log(Array.isArray(cks)) // false
      console.log(cks.forEach) // 本身提供forEach方法用于遍历
      // change状态改变时候触发
      checkAll.addEventListener('change', function () {
        // console.log(this.checked) 全选按钮的状态
        const _this = this
        cks.forEach(function (item) {
          // console.log(this) //window
          // console.log(that)
          item.checked = _this.checked
        })
      })

      //3  单击每个商品 设置全选按钮状态
      // 思路: 单击某个商品   所有商品都选中全选按钮选中,只要有一个未选中全选按钮取消
      // cks本身是伪数组,它身上没有every方法,需要转成真正的数组,才能使用
      console.log(Array.isArray(Array.from(cks)))
      cks.forEach(function (item) {
        item.addEventListener('change', function () {
          checkAll.checked = Array.from(cks).every(function (item) {
            return item.checked
          })
        })
      })
    </script>
  </body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1233902.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VCP-DCV VMware vSphere,即将开课~想了解点击查看

VCP-DCV VMware vSphere 本周开课~ 想报名的必须提前预约啦 &#x1f447;&#x1f447;&#x1f447; 课程介绍 本课程重点讲授如何安装、配置和管理VMware vSphere 8.0&#xff08;包括VMware ESXi™ 8.0和VMware vCenter Server™ 8.0&#xff09; 本课程将帮助您做好…

「编程学习书籍总结」提升个人能力从读书开始

✍️作者简介&#xff1a;码农小北&#xff08;专注于Java、Android、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f449;关注✨、…

音视频开发是不是C++开发中最难的细分方向?

音视频开发是不是C开发中最难的细分方向&#xff1f; 是不是最难不敢说(毕竟数据库、Office、 大型游戏可能更难)&#xff0c;但确实也已经很难 了。至少对我 这种主要搞web前端的人来说&#xff0c;真的有那种力不从心的感觉。最近很多小伙伴找我&#xff0c;说想要一些音视频…

设计模式系列:三、责任链设计模式

一、概述 责任链模式是一种行为设计模式&#xff0c;它允许多个对象处理一个请求&#xff0c;从而避免了请求的发送者和接收者之间的耦合关系。 优点是把任务划分为一个一个的节点&#xff0c;然后按照节点之间的业务要求、顺序&#xff0c;把一个个节点串联起来&#xff0c;…

Vulnhub 解决虚拟机网络问题

前言&#xff1a; 有的时候&#xff0c;我们从vulnhub官网下载ovf文件导入到虚拟机后&#xff0c;使用扫描器扫描存活的时候发现扫不到靶机的IP&#xff0c;这是因为虚拟机的网卡配置有问题。我们需要进安全模式修改一些配置。 1. 在虚拟机开机的时候按一下上下键&#xff0c;让…

全国的科技创新情况数据分享,涵盖2020-2022年三年情况

随着国家对科技创新的重视和大力支持&#xff0c;全国的科技创新情况越来越受到关注。 我们根据中国城市统计年鉴的这方面指标&#xff0c;分析汇总得出全国科技创新情况数据&#xff0c;需要说明的是&#xff0c;由于统计年鉴指标调整&#xff0c;每一年的数据并非字段相同&a…

Ubuntu Server download

前言 Ubuntu——公共云、数据中心和边缘上最受欢迎的 Linux 发行版。自成立以来&#xff0c;Ubuntu 一直在获得市场份额&#xff0c;截至今天已接近 50%。 Ubuntu Server download VersionUbuntu Server 其它主机型号版本Ubuntu AMD历史版下载百度云Ubuntu Server all Ubuntu…

onnx模型转换opset版本和固定动态输入尺寸

背景&#xff1a;之前我想把onnx模型从opset12变成opset12&#xff0c;太慌乱就没找着&#xff0c;最近找到了官网上有示例的&#xff0c;大爱onnx官网&#xff0c;分享给有需求没找着的小伙伴们。 1. onnx模型转换opset版本 官网示例&#xff1a; import onnx from onnx im…

python3函数

1、定义函数 函数代码块以def关键词开头&#xff0c;后接函数标识符名称和圆括号任何传入参数和自变量必须放在圆括号中间&#xff0c;圆括号之间可以用于定义参数函数内容以冒号&#xff1a;起始&#xff0c;并且缩进return【表达式】结束函数&#xff0c;选择性返回一个值调…

【数据结构(三)】双向链表(2)

文章目录 1. 基本概念2. 管理双向链表的思路3. 代码实现 1. 基本概念 管理单向链表的缺点分析: ①单向链表&#xff0c;查找的方向只能是一个方向&#xff0c;而双向链表可以向前或者向后查找。     ②单向链表不能自我删除&#xff0c;需要靠辅助节点 &#xff0c;而双向…

Ubuntu18.04安装LeGO-LOAM保姆级教程

系统环境&#xff1a;Ubuntu18.04.6 LTS 1.LeGO-LOAM的安装前要求&#xff1a; 1.1 ROS安装&#xff1a;参考我的另一篇博客Ubuntu18.04安装ROS-melodic保姆级教程_灬杨三岁灬的博客-CSDN博客文章浏览阅读168次。Ubuntu18.04安装ROS-melodic保姆级教程https://blog.csdn.net/…

拓扑排序-

有向无环图是拓扑排序 拓扑排序将图中所有的顶点排成一个线性序列&#xff0c;使得所有的有向边均从序列的前面指向后面。 拓扑排序使用深度优先搜索来实现&#xff0c;图中有环则无法进行拓扑排序 一个有向图&#xff0c;如果图中有入度为0的点&#xff0c;就把这个点删掉…

最全面的SHEIN开店流程,手把手教你从零起步,轻松开店!

SHEIN作为一家全球性的时尚电商平台&#xff0c;为年轻人提供了更多时尚选择和机会&#xff0c;同时也吸引了众多跨境电商卖家的关注。在5月份&#xff0c;SHEIN推出了第三方卖家平台&#xff0c;为卖家提供了全新的商机和发展赛道。毕竟目前SHEIN平台的流量是非常大的&#xf…

机器学习第11天:降维

文章目录 机器学习专栏 主要思想 主流方法 投影 二维投射到一维 三维投射到二维 流形学习 PCA主成分分析 介绍 代码 内核PCA 具体代码 LLE 结语 机器学习专栏 机器学习_Nowl的博客-CSDN博客 主要思想 介绍&#xff1a;当一个任务有很多特征时&#xff0c;我们…

【ISP】噪声--sensor(2)

1.热噪声 也叫KT/C噪声&#xff0c;或者叫暗电流噪声。电子的热运动的导致&#xff0c;温度上升&#xff0c;噪声增大。 2.FPN固定模式噪声 由于每个像素点的元器件制造的会有偏差&#xff0c;也就是这些器件的工作参数相对理论值的漂移就构成一种固定模式噪声。 3.光子散粒噪…

CHINTERGEO2023中国测绘地理信息技术装备展览会,大势智慧在3010展台期待您的莅临!

11月27日-11月29日 CHINTERGEO2023中国测绘地理信息技术装备展览会 二层-HALL3展厅-3010 大势智慧携符合信创要求的实景三维软硬件全流程解决方案 为您带来一场全国产、真安全的实景三维新型智能测绘装备盛宴 期待您的莅临&#xff01;

Vue3 customRef自定义ref 实现防抖

防抖就是防止在input 框中每输入一个字符就要向服务器请求一次&#xff0c;只要在用户输入完成过一段时间再读取用户输入的内容就能解决这个问题&#xff0c;减小服务器的压力。 1. 自定义ref是一个函数&#xff0c;可以接受参数。 比如我们自定义一个myRef&#xff1a; setu…

LeetCode【45】跳跃游戏2

题目&#xff1a; 思路&#xff1a; 注意和跳跃游戏【55】不同的是&#xff0c;题目保证可以跳到nums[n-1];那么每次跳到最大即可 代码&#xff1a; public class LeetCode45 {public static int jump(int[] nums) {int jumps 0;int currentEnd 0;int farthest 0;for(int…

Postman的各种参数你都用对了吗?

大家好&#xff0c;我是G探险者。 Postman我们都不陌生&#xff0c;作为一个广泛使用的 HTTP 客户端&#xff0c;平时我们使用它来测试接口&#xff0c;无非就是把接口的url放进去&#xff0c;然后根据请求类型get或者post,在不同位置传一下参数&#xff0c;除了常见的 Params…

linux(nginx安装配置,tomcat服务命令操作)

首先进系统文件夹 /usr/lib/systemd/systemLs | grep mysql 查看带有命名有MySQL的文件夹修改tomcat.service文件复制jdk目录替换成我们的路径替换成我们的路径进入这个目录&#xff0c;把修改好的文件拖到我们的工具里面重新刷新系统 systemctl daemon-reload查看tomcat状态…