基于bootstrap的手风琴,并且带全选框

基本思路如下:

1、根据bootstrap的手风琴,自己添加复选框,这里需要注意的是复选框所在的div位置要放对,不然可能勾选不了。

2、编写全选/取消全选的绑定事件。

全部代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>手风琴</title>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
    <script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
    <style type="text/css">
        /*手风琴样式*/
        .collapseSelectionHeader {
            cursor: pointer;
            background-color: #dddfe4;
            padding-top: 10px;
            padding-bottom: 10px;
        }
        /**箭头图标合起来的样式*/
        /** .parent-nav表示父标签 after表示在此后加入字体图标  */
        .accordion-toggle[aria-expanded="true"]:before, .accordion-toggle[aria-expanded="false"]:before{
            content: "f077";/** 箭头向上图标*/
            vertical-align: middle;
            font-family: FontAwesome;
            font-size: 15px;
            margin-right: 3.5%;
            margin-left: 3.5%;
        }

        /**箭头图标展开式时的样式*/
        /** collapsed是bootstrap的属性,表示父标签展开的时候加入的图标 after表示在此后加入字体图标  */
        .accordion-toggle[aria-expanded="true"]:before {
            content: "f078";/** 箭头向下图标*/
            font-family: FontAwesome;
            vertical-align: middle;
            font-size: 15px;
            margin-right: 3.5%;
            margin-left: 3.5%;
        }
        /*手风琴头部文字*/
        .collapseSelectionHeaderText{
            display: inline-flex;
            vertical-align: middle;
        }
        /*手风琴复选框样式*/
        .accordion-inner-ul{
            list-style: none;
            padding:0;
            margin-top: 0;
            margin-bottom: 1em;
        }
        .accordion-inner-ul-li{
            margin: 14px 0;
            display: flex;
        }
        .accordion-inner-ul-li-span{
            width: 88px;
            display: inline-block;
            margin-left: 3.5%;
            line-height: 1.5;
        }
        .accordion-inner-ul-li-checkbox-group{
            box-sizing: border-box;
            margin: 0;
            padding: 0;
            color: rgba(0,0,0,.65);
            font-size: 14px;
            font-variant: tabular-nums;
            line-height: 1.5;
            list-style: none;
            -webkit-box-flex: 1;
            flex: 1;
            display: flex;
            flex-wrap: wrap;

        }

        .accordion-inner-ul-li-checkbox-group .checkbox-inline, .radio-inline {
            min-width: 60px;
            padding-left: 0!important;
        }

        .accordion-inner-ul-li-checkbox-group .checkbox input[type=checkbox], .checkbox-inline input[type=checkbox], .radio input[type=radio], .radio-inline input[type=radio] {
            position:unset !important;
            margin-left: 0 !important;
            margin-top: 0 !important;
            vertical-align: middle !important;
        }

        .accordion-toggle-width {
            width: 85%;
            display: inline-block;
        }

        .checkbox-inline-custom-margin {
            margin-right: 10px!important;
            margin-left: 0!important;
        }
    </style>
    <script>
        $(function () {
            //checkbox 全选/取消全选
            var xxCheckAll,zxCheckAll = false;
            function swapCheck(name,isCheckAll) {
                if (isCheckAll) {
                    $("input[name="+ name +"]").each(function() {
                        this.checked = false;
                    });
                } else {
                    $("input[name="+ name +"]").each(function() {
                        this.checked = true;
                    });
                }
                if(name === 'select-xx'){
                    xxCheckAll = !xxCheckAll;
                }else if(name === 'select-zx') {
                    zxCheckAll = !zxCheckAll;
                }
            }
            /*小学全选*/
            $('#xx-ALL').on('click',function() {
                swapCheck('select-xx',xxCheckAll);
            });
            /*中学全选*/
            $('#zx-ALL').on('click',function() {
                swapCheck('select-zx',zxCheckAll);
            });

            /*测试手风琴多选框*/
            $("button[name=Button1]").on('click',function () { //获得所有的name=names的input,并给他们添加click监听事件
                var obj = getCheckArrAll();
                var description = "";
                    $.each(obj,function (i,obj) {
                        var property=obj.nj;
                        var xm = obj.xm;
                        description+=property+" : "+xm+"
";
                    });
                alert(description);
        });
            /*清空所有学生姓名的checkbox*/
            function clearCheckArrAll() {
                $("input[name='select-xx']").prop("checked",false);
                $("input[name='select-zx']").prop("checked",false);
            }
            //获取指定所有学生姓名的checkbox,并返回数组
            function getCheckArrAll() {
                var sumData = [];
                sumData =  sumData.concat(getCheckArr('select-xx'),getCheckArr('select-zx'));
                //console.log(sumData);
                return sumData;
            };
            //获取指定学生姓名name的checkbox,并返回数组
            function getCheckArr(name){
                var arr = new Array();
                $("input[name="+ name +"]:checked").each(function (key, value) {
                    var key = this.id;
                    var xm = key.substring(key.lastIndexOf("-")+1);  //学生姓名  --{key,value
                    var nj = key.substring(0, key.lastIndexOf("-"));//年级名  --数组
                    var tempJson = {
                        xm:xm,    //学生姓名
                        nj:nj       //年级
                    };
                    var value = this.value;  //学生姓名名

                    if(value !== "ALL"){  //全选框
                        arr.push(tempJson);
                    }
                });
                var tempArr = [];//存放年级名
                var Data = [];   //存放去重后的数据
                for (var i = 0; i < arr.length; i++) {
                    if (tempArr.indexOf(arr[i].nj) === -1) {  //如果年级名数组不存在该年级名,则添加进去,否则找到已有年级名进行添加
                        Data.push({
                            nj: arr[i].nj,
                            xm: arr[i].xm
                        });
                        tempArr.push(arr[i].nj);
                    } else {
                        for (var j = 0; j < Data.length; j++) {
                            if (Data[j].nj == arr[i].nj) {
                                Data[j].xm += ',' + arr[i].xm ;
                                break;
                            }
                        }
                    }
                }
                /* console.log(Data);*/
                return Data;
            };
        });

    </script>
</head>
<body>
<!--测试按钮-->
<div>
    <button type="button" class="btn btn-primary" name="Button1">弹出所选内容</button>
</div>
<!--折叠面板-->
<div style=" 100%;" id="collapseSelection">
    <div class="accordion" id="accordion2">
        <!--小学-->
        <div class="accordion-group">
            <div class="accordion-heading  collapseSelectionHeader">
                <div class="accordion-toggle  accordion-toggle-width" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo" aria-expanded="false">
                    <div class="collapseSelectionHeaderText">小学</div>
                </div>
                <!--全选/全取消框-->
                <div  style="display: inline-block;">
                    <label class="checkbox-inline">
                        <input type="checkbox" id="xx-ALL" value="ALL" name="select-xx">
                    </label>
                </div>
            </div>
            <div id="collapseTwo" class="accordion-body collapse">
                <div class="accordion-inner">
                    <ul class="accordion-inner-ul">
                        <!--小学一年级-->
                        <li class="accordion-inner-ul-li">
                            <span class="accordion-inner-ul-li-span">
                                小学一年级
                            </span>
                            <div class="accordion-inner-ul-li-checkbox-group">
                                <label class="checkbox-inline checkbox-inline-custom-margin" >
                                    <input type="checkbox" id="xx-zs" value="zs" name="select-xx"> 张三
                                </label>
                                <label class="checkbox-inline checkbox-inline-custom-margin" >
                                    <input type="checkbox" id="xx-ls" value="ls" name="select-xx"> 李四
                                </label>
                            </div>
                        </li>
                        <!--小学二年级-->
                        <li class="accordion-inner-ul-li">
                            <span class="accordion-inner-ul-li-span">
                                小学二年级
                            </span>
                            <div class="accordion-inner-ul-li-checkbox-group">
                                <label class="checkbox-inline checkbox-inline-custom-margin" >
                                    <input type="checkbox" id="xx-ww" value="BWD" name="select-xx"> 王五
                                </label>
                                <label class="checkbox-inline checkbox-inline-custom-margin" >
                                    <input type="checkbox" id="xx-xm" value="FWD" name="select-xx"> 小明
                                </label>
                                <label class="checkbox-inline checkbox-inline-custom-margin" >
                                    <input type="checkbox" id="xx-xh" value="MUX" name="select-xx"> 小红
                                </label>
                            </div>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
        <!--小学-->
        <!--中学-->
        <div class="accordion-group">
            <div class="accordion-heading collapseSelectionHeader">
                <div class="accordion-toggle  accordion-toggle-width" data-toggle="collapse" data-parent="#accordion2" href="#collapseThree" aria-expanded="false">
                    <div class="collapseSelectionHeaderText">中学</div>
                </div>
                <!--全选/全取消框-->
                <div  style="display: inline-block;">
                    <label class="checkbox-inline">
                        <input type="checkbox" id="zx-ALL" value="ALL" name="select-zx">
                    </label>
                </div>
            </div>
            <div id="collapseThree" class="accordion-body collapse">
                <div class="accordion-inner">
                    <ul class="accordion-inner-ul">
                        <!--中学一年级-->
                        <li class="accordion-inner-ul-li">
                            <span class="accordion-inner-ul-li-span">
                                中学一年级
                            </span>
                            <div class="accordion-inner-ul-li-checkbox-group">
                                <label class="checkbox-inline checkbox-inline-custom-margin" >
                                    <input type="checkbox" id="zx-xh" value="xh" name="select-zx"> 小黑
                                </label>
                                <label class="checkbox-inline checkbox-inline-custom-margin" >
                                    <input type="checkbox" id="zx-xl" value="xl" name="select-zx"> 小兰
                                </label>
                            </div>
                        </li>

                    </ul>
                </div>
            </div>
        </div>
        <!--中学-->
    </div>
</div>
<br />
</body>
</html>

-------------------------------------------------------------------------------------------------

QQ群:871934478

版权所有,转载请注明源地址                          

-------------------------------------------------------------------------------------------------

原文地址:https://www.cnblogs.com/yiliangmi/p/12759651.html