ES6语法 checkbox 复选框 单选 / 全选 / 删除

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>ES6语法 checkbox 全选 删除</title>
    <style>
        * { margin: 0;  padding: 0; }
        h2{ line-height: 50px; }
        section { padding: 50px; background: #ccc; }
        li { list-style: none; line-height: 36px; font-size: 18px; color: blue; }
        li.active { background: purple; color: white;}
        input { width: 20px; height: 20px; margin: 10px; vertical-align: middle; }
        button { font-size: 18px; color: blue; padding: 0px 20px; }
    </style>
</head>

<body>

    <section>
        <h2>请选择您的爱好:</h2>
        <hr />

        <ul id="Box">
            <li><label><input type="checkbox" />看书</label></li>
            <li><label><input type="checkbox" />上网</label></li>
            <li><label><input type="checkbox" />学习</label></li>
            <li><label><input type="checkbox" />运动</label></li>
            <li><label><input type="checkbox" />旅游</label></li>
            <li><label><input type="checkbox" />网购</label></li>
        </ul>

        <div>
            <hr />
            <label><input id="All" type="checkbox" />全选</label>
            <button id="Del">删除</button>
        </div>

    </section>

    <script>
        let Box = document.querySelector('#Box');
        let All = document.querySelector('#All');
        let Del = document.querySelector('#Del');

        //获取ul下面所有的li 并转换为数组 方便用forEach()循环
        let oLi = [...Box.querySelectorAll('li')];

        //选项列表
        oLi.forEach((o, i) => {
            let input = o.querySelector('input');
            input.onchange = () => {

                // o.className = input.checked ? 'active' : '';
                input.checked ? o.classList.add('active') : o.classList.remove('active');

                // 所有选项被选中时
                All.checked = oLi.every(item => item.querySelector('input').checked);
            };
        });

        //全选按扭 
        All.onclick = () => {
            oLi.forEach(item => {

                // 全选按扭被选中时,让所有的选项被选中
                item.querySelector('input').checked = All.checked;

                // 让所有的选中添加样式
                All.checked ? item.classList.add('active') : item.classList.remove('active');
            });
        };

        //删除按扭
        Del.onclick = () => {

            // 当oLi数组中被删除的选项 用 filter过滤后 再重新赋值给 oLi;
            oLi = oLi.filter(item => {

                // 将被选中的选项删除
                if (item.querySelector('input').checked) {
                    item.parentNode.removeChild(item);
                    return false;
                } else {
                    return true;
                };
            });

            //如果所有选项都删除后,全选按扭应处于非选中状态
            All.checked = oLi.every(item => item.querySelector('input').checked) && 0 < oLi.length;
        };
    </script>
</body>

</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值