【Web】0基础学Web—tab切换、全选与反选、购物车

news2025/1/8 15:16:51

0基础学Web—tab切换、全选与反选、购物车

  • teb切换
    • style样式
    • 代码
  • 全选与反选
    • 事件
  • 购物车

teb切换

style样式

<style>
    .tabs {
        display: flex;
        justify-content: space-between
    }
    .main {
        width: 800px;
        margin: 0 auto
    }
    .active {
        background-color: #b53838;
    }
    .contents>li {
        width: 800px;
        height: 500px;
        background-color: #75bda7;
        display: none;
    }
    .contents>li:first-of-type {
        display: block;
    }
</style>

代码

<body>
    <div class="wrapper">
        <div class="main">
            <ul class="tabs">
                <li>品牌介绍</li>
                <li>规格包装</li>
                <li>售后保障</li>
                <li>商品评价</li>
            </ul>
            <ul class="contents">
                <li>品牌介绍内容</li>
                <li>规格包装内容</li>
                <li>售后保障内容</li>
                <li>商品评价内容</li>
            </ul>
        </div>
    </div>
    <script>
        let _ts = document.querySelectorAll('.tabs>li')
        let _cs = document.querySelectorAll('.contents>li')
        _ts.forEach((_li, index) => {
            _li.onclick = function () {
                //先去掉所有li的背景样式
                for (const ele of _ts) {
                    ele.classList.remove('active')
                }
                //先隐藏所有内容
                for (const ele of _cs) {
                    ele.style.display = 'none'
                }
                //再添加当前的样式
                _li.classList.add('active')
                //再显示当前的内容
                _cs[index].style.display = 'block'
            }
        })
    </script>
</body>

全选与反选

事件

      onclick:点击
      onchange: 改变
      onmouseover:鼠标悬浮触发
      onblur: 表单失去焦点
      onfocus: 表单光标聚集时
<body>
    <div class="wrapper">
        <input type="checkbox" class="all">全选
        <hr>
        <input type="checkbox">编程
        <input type="checkbox">购物
        <input type="checkbox">打球
        <input type="checkbox">打游戏
        <input type="checkbox">熬夜
    </div>
    <script>
        let _all = document.querySelector('.all')  //全选
        let _hobbys = document.querySelectorAll('input:not(.all)')  //全选

        //全选
        //给all加onchange事件
        _all.onchange = function () {
            for (const _hobby of _hobbys) {
                //每一个爱好的checked值与全选的一致
                _hobby.checked = _all.checked
            }
        }

        //反选
        _hobbys.forEach(_hobby => {
            _hobby.onchange = function () {
                //过滤出已选中的hobby(checked=true)
                let checkedHobbys = [..._hobbys].filter(ele => ele.checked == true)
                _all.checked = checkedHobbys.length == _hobbys.length
            }
        })
    </script>
</body>

购物车

<body>
    <div class="wrapper">
        <table border="1" cellspacing="0" rules="all">
            <thead>
                <tr>
                    <td><input type="checkbox" class="all"></td>
                    <td>商品名</td>
                    <td>商品单价</td>
                    <td>购买数量</td>
                    <td>小计</td>
                    <td>操作</td>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td><input type="checkbox"></td>
                    <td>笔记本电脑</td>
                    <td>4000</td>
                    <td>
                        <button class="cal">+</button>
                        <input type="text" value="1" style="width: 40px;">
                        <button class="cal" disabled>-</button>
                    </td>
                    <td><span>4000</span></td>
                    <td class="rem" onclick="remo(this)">移除</td>
                </tr>
                <tr>
                    <td><input type="checkbox"></td>
                    <td>机械鼠标</td>
                    <td>120</td>
                    <td>
                        <button class="cal">+</button>
                        <input type="text" value="1" style="width: 40px;">
                        <button class="cal" disabled>-</button>
                    </td>
                    <td><span>120</span></td>
                    <td class="rem" onclick="remo(this)">移除</td>
                </tr>
                <tr>
                    <td colspan="6" style="text-align: right;">总价:<span id="total">0</span></td>
                </tr>
            </tbody>
        </table>
    </div>
</body>
<script>
    //获取全选
    let _all = document.querySelector('.all')  //全选
    //获取所有商品复选框
    let goodscheckbox = document.querySelectorAll('input[type=checkbox]:not(.all)')
    //全选
    //给all加onchange事件
    _all.onchange = function () {
        for (const goodch of goodscheckbox) {
            //每一个商品的checked值与全选的一致
            goodch.checked = _all.checked
        }

        sumtotal()  //重新计算总价
    }

    //反选
    goodscheckbox.forEach(goodch => {
        goodch.onchange = function () {
            //过滤出已选中的商品(checked=true)
            let checkedgoods = [...goodscheckbox].filter(ele => ele.checked == true)
            _all.checked = checkedgoods.length == goodscheckbox.length

            sumtotal()  //重新计算总价
        }
    })

    //获取所有加减号
    let _cals = document.querySelectorAll('.cal')
    _cals.forEach(_cal => {
        _cal.onclick = function () {
            // 获取当前数量
            let _num = _cal.parentElement.children[1].value * 1
            if (_cal.innerText == '+') {
                _cal.nextElementSibling.nextElementSibling.disabled = false  //减号启用
                _num += 1
            } else {
                if (_num <= 2) {
                    _cal.disabled = true  //禁用
                }
                _num -= 1
            }
            _cal.parentElement.children[1].value = _num   //更新input框的值

            //获取单价
            let unitprice = _cal.parentElement.previousElementSibling.innerText * 1

            //更新小计
            _cal.parentElement.nextElementSibling.firstElementChild.innerText = _num * unitprice

            sumtotal()  //重新计算总价

        }

    })



    //计算总价,将所有选中的小计相加
    let _total = document.querySelector('#total')
    function sumtotal() {
        let sum = 0
        //过滤出已选中的商品
        let checkedgoods = [...goodscheckbox].filter(ele => ele.checked == true)
        checkedgoods.forEach(checkedgood => {
            let xiaoji = checkedgood.parentElement.parentElement.children[4].innerText * 1
            sum += xiaoji
        })
        _total.innerText = sum

    }
</script>

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

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

相关文章

PHP框架+gatewayworker实现在线1对1聊天--接收消息(7)

文章目录 接收消息的原理接收消息JavaScript代码 接收消息的原理 接收消息&#xff0c;就是接受服务器转发的客户端消息。并不需要单独创建函数&#xff0c;因为 ws.onmessage会自动接收消息。我们需要在这个函数里进行处理。因为初始化的时候&#xff0c;已经处理的init类型的…

当算法遇到线性代数(四):奇异值分解(SVD)

SVD分解的理论与应用 线性代数系列相关文章&#xff08;置顶&#xff09; 1.当算法遇到线性代数&#xff08;一&#xff09;&#xff1a;二次型和矩阵正定的意义 2.当算法遇到线性代数&#xff08;二&#xff09;&#xff1a;矩阵特征值的意义 3.当算法遇到线性代数&#xff0…

科研绘图系列:R语言科研绘图之标记热图(heatmap)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图系统信息参考介绍 科研绘图系列:R语言科研绘图之标记热图(heatmap) 加载R包 library(tidyverse) library(ggplot2) library(reshape)…

Mysql--基础篇--SQL(DDL,DML,窗口函数,CET,视图,存储过程,触发器等)

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是用于管理和操作关系型数据库的标准语言。它允许用户定义、查询、更新和管理数据库中的数据。SQL是一种声明性语言&#xff0c;用户只需要指定想要执行的操作&#xff0c;而不需要详细说明如何…

Excel重新踩坑5:二级下拉列表制作;★数据透视表;

0、在excel中函数公式不仅可以写在单元格里面&#xff0c;还可以写在公式里面。 1、二级下拉列表制作&#xff1a; 2、数据透视表&#xff1a; 概念&#xff1a;通过拖拉就能实现复杂函数才能实现的数据统计问题。 概览&#xff1a;在插入选项中有个数据透视表&#xff0c;数…

Linux-----进程处理(waitpid,进程树,孤儿进程)

目录 waitpid等待 进程树 孤儿进程 waitpid等待 Linux中父进程除了可以启动子进程&#xff0c;还要负责回收子进程的状态。如果子进程结束后父进程没有正常回收&#xff0c;那么子进程就会变成一个僵尸进程——即程序执行完成&#xff0c;但是进程没有完全结束&#xff0c;其…

解决报错net.sf.jsqlparser.statement.select.SelectBody

在我们项目集成mybatis-plus时,总会遇到奇奇怪怪的报错,比如说下面的这个报错 而这个报错,是告诉我们的分页依赖冲突,要加个jsqlparser依赖来解决这个冲突,也相当于平衡,但是可能因为我们版本的不匹配,还是会报错,例如下面这样 但是我们是不知道到底是什么依赖冲突的,这个时候就…

感知器的那些事

感知器的那些事 历史背景Rosenblatt和Minsky关于感知机的争论弗兰克罗森布拉特简介提出感知器算法Mark I感知机争议与分歧马文明斯基简介单层感知器工作原理训练过程多层感知器工作原理单层感知机 vs 多层感知机感知器模型(Perceptron),是由心理学家Frank Rosenblatt在1957年…

内核链表 例题 C语言实现

问题&#xff1a; 将下面的数据节点信息转换为链表结构&#xff0c;并遍历输出。要求根据type的值来决定val的类型。 type为1代表bool类型&#xff0c;2代表整形&#xff0c;3代表浮点型。无需解析文本&#xff0c;直接赋值形成节点即可。 代码&#xff1a; list.c #includ…

C语言结构体数组

上次我们讲解了结构体&#xff0c;这里还有高级应用就是结构体数组&#xff08;集合的集合&#xff09; &#xff08;这里提醒一句&#xff0c;想要在北京参加NCRE考试的朋友们今天开始报名了&#xff09; 定义 还是拿上回那个学生数据的结构体 typedef struct {int year;i…

深入了解 ES6 Map:用法与实践

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

在Vue3项目中使用svg-sprite-loader

1.普通的svg图片使用方式 1.1 路径引入 正常我们会把项目中的静态资源放在指定的一个目录&#xff0c;例如assets,使用起来就像 <img src"../assets/svgicons/about.svg" /> 1.2封装组件使用 显然上面的这种方法在项目开发中不太适用&#xff0c;每次都需…

谷歌SEO真的需要很长时间吗?

关键在于策略与执行力&#xff0c;很多人在刚开始做谷歌SEO时&#xff0c;都会产生一种挫败感&#xff0c;觉得排名变化太慢&#xff0c;看不到显著效果。这其实是因为SEO本身是一项需要时间的工作&#xff0c;特别是在竞争激烈的领域。但如果策略得当、执行力强&#xff0c;时…

耐高压26V输入5V升压充电8.4V芯片

HU6877作为一款集成了26V高耐压保护的5V升压至8.4V两节锂电池充电管理IC&#xff0c;凭借其高效升压、智能充电管理、多重安全保护及高耐压特性&#xff0c;在高端手电筒、便携式医疗设备、无人机等领域展现出了广泛的应用前景。本文将详细探讨HU6877的技术特点、工作原理、应用…

linuxCNC(六)配置LinuxCNC完成伺服控制

这里写目录标题 1、 cia402安装2、找伺服描述文件&#xff08;xml&#xff09;3、配置ethercat-config.xml3.1、打开hal-cia402/example/ethercat-conf.xml3.2、修改 ethercat-conf.xml文件中vid"0x000116c7" pid"0x003e0402"3.3、其他参数&#xff0c;根据…

【数据结构】链表(2):双向链表和双向循环链表

双向链表&#xff08;Doubly Linked List&#xff09; 定义&#xff1a; 每个节点包含三个部分&#xff1a; 数据域。前驱指针域&#xff08;指向前一个节点&#xff09;。后继指针域&#xff08;指向下一个节点&#xff09;。 支持从任意节点向前或向后遍历。 #define dat…

指针 const 的组合

1、首先来了解一下常量 const int num 5&#xff1b; 那么num的值是5&#xff0c; num的值不可修改 2、来了解一下指针 int value 5; int* p &value; 我喜欢吧指针和类型放一起&#xff0c;来强调p是一个指针类型&#xff0c; 而赋值的时候就得赋值一个int类型的地址…

Tableau数据可视化与仪表盘搭建-数据可视化原理

目录 内容 做个小实验 数据如何变成图表 1 2 维度和度量定义 3 度量映射图形&#xff0c;维度负责区分 1 可映射的数据类型 2 可视化字典 3 使用Tableau将数据变成图表(Tableau可视化原理) 1 2 拖拽 3 具体操作 4 总结 内容 点击左下角的工作表 tableau可以自动…

【WRF数据准备】气象驱动数据-ERA5是否需要单层位势数据?

目录 气象驱动数据-ERA5是否需要单层位势(Geopotential)数据?位势(Geopotential)输入的重要性Vtable的管理参考气象驱动数据-ERA5是否需要单层位势(Geopotential)数据? 本博客参考WRF论坛中讨论内容-How to use ERA5 Data From Copernicus Database,总结位势(Geopot…

用ResNet50+Qwen2-VL-2B-Instruct+LoRA模仿Diffusion-VLA的论文思路,在3090显卡上训练和测试成功

想一步步的实现Diffusion VLA论文的思路&#xff0c;不过论文的图像的输入用DINOv2进行特征提取的&#xff0c;我先把这个部分换成ResNet50。 老铁们&#xff0c;直接上代码&#xff1a; from PIL import Image import torch import torchvision.models as models from torch…