js分类多选全选
效果如图:


HTML代码:
<div class="form-group quanxian-wrap">
<label>项目</label>
<form class="form-horizontal" style="border-top-left-radius: 4px;border-top-right-radius: 4px;">
<div data-v-55b43bfa="" class="toolbar">
<div data-v-55b43bfa="" class="form-group">
//模糊查询
<div data-v-55b43bfa="" class="form-group-bd dropdown" style="width: 400px">
<input type="search" class="weui-search-bar__input weui-flex__item form-control" id="searchInput" placeholder="请输入项目名称" style="border: 1px solid #ccc;" v-model="search " required="">
</div>
//点击显示隐藏下拉框
<div class="form-group-ft">
<button data-v-55b43bfa="" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true" class="btn btn-default dropdown-toggle" v-on:click="checkSelectedButton">已选项目:{{bizShowList.length}}<span data-v-55b43bfa="" class="caret"></span></button>
</div>
<div data-v-fc6e5168="" class="dropdown-menu" style="display: block;"v-if="showSelectedProjects">
<div data-v-fc6e5168="" class="form-group">
<div data-v-fc6e5168="" class="col-sm-12">
<div data-v-fc6e5168="" class="item-select" v-for="(item,index) in bizShowList">
<span data-v-fc6e5168="">{{item.name}}</span>
<a data-v-fc6e5168="" href="javascript:;" v-on:click="deleteSelectedItem" v-bind:title="index">
<i data-v-fc6e5168="" class="icon-del"></i>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
//按片区分类,单选全选项目
<form class="form-horizontal">
<div class="form-group">
<div class="col-sm-12">
<div class="biz-list" v-for="(project,index) in getBizList" :style="{hidden: project.hidden}">
<div class="biz-list-hd cf"> //片区选择
<div class="checkbox" style="float: none;display: block;clear: both;" :style="{display: search ?'none':'block'}">
<label>
<input type="checkbox" v-model="project.checked" v-on:click="updateSelectedAreaList(index)">
<span >{{project.area}}</span>
</label>
</div>
</div>
<div class="biz-list-bd cf"> //项目选择
<div class="checkbox" v-for="(item,index) in project.data" :style="{display:item.name.indexOf(search) > -1?'block':'none'}">
<label>
<input type="checkbox" v-model="item.checked" v-on:click="updateSelectedProjectList"><span>{{item.name}}</span>
</label>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
JS:
export default {
        data() {
            return {
                showSelectedProjects: false,
                search: ''
            };
        },
        computed: {
            // 关联项目列表
            getBizList() {
                this.bizList = cloneObject(this.$store.state.user.bizList);
                this.bizList.splice(0, 1);
                let data = this.bizList;
                console.log(333,data);
                for(let i=0;i<data.length;i++) {
                    if (data[i].area ==='' || data[i].area === null) {
                        data[i].area = '暂无片区';
                    }
                }
                return this.regroup(this.bizList);
            }
        },
        methods: {
            // 转换数据显示格式
            regroup(arr) {
                var map = {},
                    dest = [];
                // 对象数组 根据项目编号(id)字段 分组
                for (var i = 0; i < arr.length; i++) {
                    var ai = arr[i];
                    if (!map[ai.area]) {
                        dest.push({
                            area: ai.area,
                            data: [ai]
                        });
                        map[ai.area] = ai;
                    } else {
                        for (var j = 0; j < dest.length; j++) {
                            var dj = dest[j];
                            if (dj.area === ai.area) {
                                dj.data.push(ai);
                                break;
                            }
                        }
                    }
                }
                return dest;
            },
            //删除已选项目
            deleteSelectedItem(event) {
                let index = event.target.parentNode.title;
                let selectedItem = this.bizShowList[index];
                if (!selectedItem) return;
                this.bizShowList.forEach(item => {
                    if (item.appId == selectedItem.appId) {
                        item.checked = false;
                    }
                });
                this.updateSelectedProjectList();
            },// 单个项目选中
            updateSelectedProjectList() {
                this.showSelectedProjects = false;
                let list = [];
                let bizData = this.getBizList;
                for (let i = 0; i < bizData.length; i++) {
                    bizData[i].data.forEach(item => {
                        if (item.checked) {
                            list.push(item);
                        }
                    })
                }
               //判断如果该片区下所有项目被选中,则选中该片区,否则取消选中
                for (let i = 0; i < bizData.length; i++) {
                    for (let j = 0; j < bizData[i].data.length; j++) {
                        if (!bizData[i].data[j].checked) {
                            bizData[i].checked = false;
                            break
                        }
                        if (j === bizData[i].data.length - 1) {
                            bizData[i].checked = true;
                        }
                    }
                }
                this.bizShowList = list;
            },
            // 片区选择
            updateSelectedAreaList(index) {
                this.showSelectedProjects = false;
                let list = [];
                let bizData = this.getBizList;
               //选择片区,则将该片区下所有项目选中,取消则不选中
                for (let j = 0; j < bizData[index].data.length; j++) {
                    bizData[index].data[j].checked = bizData[index].checked;
                }
          //将最后选中的项目push到list数组中
                for (let i = 0; i < bizData.length; i++) {
                    bizData[i].data.forEach(item => {
                        if (item.checked) {
                            list.push(item);
                        }
                    })
                }
                this.bizShowList = list;
            },
    }
}
js分类多选全选的更多相关文章
- JS中表格的全选和删除要注意的问题
		在项目开发中,由于刚刚开始做项目,我对js还不是很精通,所以在用js对表格的全选和删除中遇到了不少问题,后来通过查找资料解决了,之后总结了一下关于js表格的全选和删除出现的一些问题,希望能帮助到大家. ... 
- 基于JQ的多选/全选/反选及获取选中的值
		<!-- author:青芒 --> <!DOCTYPE html> <html lang="en"> <head> <met ... 
- Dynamic CRM 2013学习笔记(二十六)报表设计:Reporting Service报表 动态参数、参数多选全选、动态列、动态显示行字体颜色
		上次介绍过CRM里开始报表的一些注意事项:Dynamic CRM 2013学习笔记(十五)报表入门.开发工具及注意事项,本文继续介绍报表里的一些动态效果:动态显示参数,参数是从数据库里查询出来的:参数 ... 
- Vue.js实现checkbox的全选和反选
		小颖之前写的代码存在一个bug,就是当你选择全选的时候去掉后面的一个选项,再点全选结果就是反的了.很感谢博客园的朋友帮我改了这个问题嘻嘻,下面一起来看看具体是怎么实现的吧. 1.html <te ... 
- vue.js 批量删除跟全选,反选效果
		<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ... 
- js实现checkbox的全选和全不选功能
		html代码: <form name="form1" method="post" action="manage.php?act=sub" ... 
- <一>初探js特效魅力之全选不选反选04
		初探js特效魅力04 我们在进入到公司里面工作的时候,做一个同一个项目,经常是大家分工合作,当我们写css时,一般不写在行间,因为这样会被误操作,也就是被乱删了都不知道,这样的后果是很难检查的 ,因为 ... 
- asp.net中Repeater结合js实现checkbox的全选/全不选
		前台界面代码: <input name="CheckAll" type="checkbox" id="CheckAll" value= ... 
- js和jq实现全选反选
		在前端中用到全选反选的案例并不少,在这里呢我就实现这个功能给大家参考参考. 这里呢就先贴上我的html和css代码 <div class="wrap"> <tab ... 
随机推荐
- mysql使用mysqld_multi工具启动多实例
			先给出实验环境/etc/my.cnf文件内容修改内容为:添加了[mysqld_multi]标签和多出来两个数据库的标签[mysqld3307]和[mysqld3308]配置完成后启动方法,举一例:my ... 
- 关于《Selenium 2自动化测试实战  基于Python语言》学习过程中键盘的常用操作
			下边是自己在学习过程中总结的一些常用键盘的操作 
- 关于c++对文件读写的封装
			namespace { UINT_T GetWriteSizeForNoBuf(UINT_T fsize) { UINT_T write_buf_size = ; == ) { write_buf_s ... 
- Codeforces Round #513
			A. Phone Numbers 题意:给一些数字,每个电话号码以8开头,11位,求最多组成多少个号码,重复累加. #include <bits/stdc++.h> using names ... 
- ACM-ICPC 2017 Asia Xi'an J LOL 【暴力 && 排列组合】
			任意门:https://nanti.jisuanke.com/t/20750 J - LOL 5 friends play LOL together . Every one should BAN on ... 
- 2018.10.7 理解Hibernate的工作原理及其中的ORM详解
			复习 hibernate框架 简介j及其搭建: hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库. 1 ... 
- git bush 代码提交
			# git add . # git commit -m"init project" # git push 
- P1800 software_NOI导刊2010提高(06)
			P1800 software_NOI导刊2010提高(06) 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术 ... 
- linux 学习(三) php相关
			五 php相关 配置文件位置 /etc/apache2/apache2.conf 1禁止列举目录 sudo vi /etc/apache2/sites-enabled/000-default 删除Op ... 
- JavaEE权限管理系统的搭建(八)--------角色的增删改
			如下图所示,添加角色的同时,要给角色分配权限菜单,关于权限数的显示,我实现了两种方式,普通方式和Ztree方式, 普通方式展示树: 主要代码部分: /** * 进入角色添加页面 * @param mo ... 
