要实现这种功能,很明显用elment ui实现不了。element ui 纵向需要prop名字不一样才能展示,很明显,我这个一层二层是名字一样的数组
期望后台返回数组

是这种格式。
所有需要自己用table tr td 去画表格,而且使用element ui 的checkbox我实现不了纵向全选,所有全部使用了原生js。

//templat部分<table class="table-style">//纵向全选表头<th  v-for="(item,index) in thList" :key="'th'+index"><div v-show="index!==0"><input  type="checkbox" class="check" @click="verCheck(index)"/><span>全选</span></div></th><div></div><tr v-for="(item,xIndex) in trList" :key="xIndex" class="check-unit">//横向表头<td><input type="checkbox" class="check" @click="transverseClick(xIndex)"/>{{item.floor}}层</td>//单元表格<td v-for="(citem,yIndex) in item.unitList" :key="citem.keys" ><div><input type="checkbox" class="check" @click="(e)=>unitCheckClick(e,xIndex,yIndex)" :class="['verCheck'+yIndex,'tran'+xIndex]"/>{{citem.unit}}</div></td></tr></table>data() {return {trList: [{ floor: 1,key: 1,unitList: [{ keys: 1, unit: '101', area: '90m²', house: '2室1厅1卫1阳台' },{ keys: 2, unit: '102', area: '90m²', house: '2室1厅1卫1阳台' },{ keys: 3, unit: '103', area: '90m', house: '2室1厅1卫1阳台' },{ keys: 4, unit: '104', area: '90m', house: '2室1厅1卫1阳台' },{ keys: 5, unit: '105', area: '90m', house: '2室1厅1卫1阳台' },{ keys: 6, unit: '106', area: '90m', house: '2室1厅1卫1阳台' }]},{ floor: 2,key: 2,unitList: [{ keys: 1, unit: '201', area: '90m', house: '2室1厅1卫1阳台' },{ keys: 2, unit: '202', area: '90m', house: '2室1厅1卫1阳台' }]},{ floor: 3,key: 3,unitList: [{ keys: 1, unit: '301', area: '90m', house: '2室1厅1卫1阳台' }]}],thList: [],//表头全选数组checkedUitList: [] // 被选中单元列表}},methods: {// 填充无单元信息表格fillTd() {let max = 0max = this.trList[0].unitList.lengthfor (const i in this.trList) {const cur = this.trList[i].unitList.lengthcur > max ? max = cur : null}// 根据最长单元数获取表头for (let i = 0; i < max + 1; i++) {this.thList.push(i)}},// 单元checkboxunitCheckClick(e, x, y) {//传入点击单个checkbox的横纵索引,通过索引获取单元信息const unit = this.trList[x].unitList[y].unitconsole.log('check', e.target.checked, this.trList[x].unitList[y].unit)//checkedUitList为提交数组,如果选中push选中数据,如果取消选中,则移除之前选中数据if (e.target.checked) {this.checkedUitList.push(unit)} else {this.checkedUitList.map((i, index) => {if (i === unit) {console.log(i)this.checkedUitList.splice(index, 1)}})}console.log(this.checkedUitList)},// 纵向全选checkboxverCheck(index) {//传入纵向索引const num = index - 1const div = document.querySelectorAll('.verCheck' + num)// div.checked = truefor (let i = 0; i < div.length; i++) {div[i].checked = !div[i].checkedif (div[i].checked) {this.trList.map(i => {//纵向单元格可以为3,也可以为2,所以i.unitList[index - 1]可能为undefined,报错,所以判断是否存在,存在push数据if (i.unitList[index - 1]) {this.checkedUitList.push(i.unitList[index - 1].unit)}})//数组去重this.checkedUitList = this.unique(this.checkedUitList)console.log(this.checkedUitList)} else {//去除取消选中值this.trList.map(i => {this.checkedUitList.map((j, jIndex) => {if (i.unitList[index - 1]) {if (i.unitList[index - 1].unit === j) {this.checkedUitList.splice(jIndex, 1)}}})})}console.log(this.checkedUitList)}},// 横向全选transverseClick(index) {const div = document.querySelectorAll('.tran' + index)for (let i = 0; i < div.length; i++) {div[i].checked = !div[i].checkedif (div[i].checked) {this.trList[index].unitList.map(i => {this.checkedUitList.push(i.unit)})} else {console.log(index)this.trList[index].unitList.map(i => {this.checkedUitList.map((j, jIndex) => {if (i.unit === j) {this.checkedUitList.splice(jIndex, 1)}})})}}console.log(div, this.checkedUitList)},// 数组去重unique(arr) {for (var i = 0; i < arr.length; i++) {for (var j = i + 1; j < arr.length; j++) {if (arr[i] === arr[j]) {// 如果第一个等于第二个,splice方法删除第二个arr.splice(j, 1)j--}}}return arr}}

全选纵向横向不可同时选择,使用name=‘tranCheckAll[]’
<input type=“checkbox” :class=“[‘check’+‘floor’+xIndex]” name=‘tranCheckAll[]’ @click=“transverseClick(xIndex)”/>
使用document.getElementsByName(‘tranCheckAll[]’)获取该行选择框使用循环去改变是否可以选择
for (let j = 0; j < tranCheckAll.length; j++) {
tranCheckAll[j].disabled = false
}

原生js实现table 横向纵向全选功能相关推荐

  1. 原生js实现table表格的各行变色功能

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  2. 利用JS来实现表格的全选、全不选、反选以及删除的功能

    利用JS来进行表格的选择删除等功能 二.代码 1.表格的制作以及事件的绑定 2.全选按钮的功能实现 3.全不选按钮的功能实现 4.反选按钮的功能实现 5.删除按钮的功能实现 6.鼠标悬停时颜色的变化 ...

  3. layui table 全选过滤_layui表格(表单)的全选功能

    最近在使用layui这个框架,其中有用到表格的全选功能,下面记录下我的使用.html文件需要引用的是layui.js和layui.css,但是上面两个文件又会引入其他文件.,如图所示, 所以建议从la ...

  4. 暑期学习日记34:js全选功能

    今天学习了使用js实现全选功能,点击全选的复选框后会将下面所有的复选框变为被选择状态. 代码如下: <!doctype html> <html> <head> &l ...

  5. JS全选功能代码优化

    JS全选功能代码优化 原文:JS全选功能代码优化 JS全选功能代码优化 最近在看javascript MVC那本书,也感觉到自己写的代码也并不优雅,所以一直在想 用另一种模式来编写JS代码,所以针对之 ...

  6. vue element ui下拉菜单和不是table列表全选功能问题解决方案

    这半个月都在折腾vue的项目,虽然不是很复杂,但对于刚入门的小白来说,踩到的坑不少,常常因为一个小问题就得浪费好久问题,不过娃不在身边,晚上和周末可以继续研究,趁睡觉前,把今天遇到的问题给总结一下,做 ...

  7. 【javascript】js实现表格全选功能

    效果: 一个表格 实现单选功能和全选功能. <!DOCTYPE html> <html lang="en"> <head><meta ch ...

  8. 微信小程序实现单选、全选功能

    前言概述 本文介绍微信小程序实现单选.全选功能,效果如下: 实现过程 1.先实现页面效果,文件*.wxml和*.wxss代码如下: <view class="container&quo ...

  9. layui表格监听全选_layui表格(表单)的全选功能

    最近在使用layui这个框架,其中有用到表格的全选功能,下面记录下我的使用.html文件需要引用的是layui.js和layui.css,但是上面两个文件又会引入其他文件.,如图所示, 所以建议从la ...

最新文章

  1. rocketmq sql解析过滤
  2. Python Django 多对多表设计批量插入方法示例
  3. 中国计算机考试区别及求职的相关思考
  4. MySQL:进阶应用
  5. Spring Boot笔记-Hibernate中@ManyToOne及@OneToOne
  6. 如何改变php的语言变中文,yii2怎么设置切换语言
  7. 批量修改Dell服务器远程管理卡iDRAC密码
  8. 《统计学习方法》—— 逻辑斯谛回归 与 最大熵模型 的介绍以及详细推导
  9. python第四章单元测试_MOOC选修课答案第四章单元测试答案_Sar编程基础期末答案...
  10. c语言上机题库徐州工程学院,徐州工程学院 C语言上机实验报告.docx
  11. Python实现APP自动化发微信群消息。这才是内卷的极致。
  12. php李炎辉,李炎恢PHP视频教程第一季资源分享
  13. 机载激光雷达原理与应用科普(三)
  14. python 全栈开发,Day113(方法和函数的区别,yield,反射)
  15. 12306泄露数据分析(二)
  16. 计算机一级抵多少学分,学分冲抵规定
  17. 项目经理如何处理中途接手的项目
  18. 本题要求编写程序,输出整数152的个位数字、十位数字和百位数字的值。
  19. intel(R)wireless-ac 9462感叹号,WLAN消失,电脑连不上网解决办法
  20. .NET新手系列(九)

热门文章

  1. vue3 实现监听store里state状态变化
  2. 常用的JavaScript位操作(Bitwise)
  3. 往返多伦多与温莎的交通全攻略!
  4. Jupyter 进行文字、图片格式编辑
  5. 二十、融会贯通之全流程操作
  6. 2021-07-16芯片-全球半导体产业核心地区的补贴及激励措施
  7. Android下的弹幕的简单实现
  8. PaddleNLP基于ERNIR3.0文本分类以中医疗搜索检索词意图分类(KUAKE-QIC)为例【多分类(单标签)】
  9. win10休眠_硬派玩家 | Win 10关机速度变慢?这还真不是错觉
  10. HiveSQL中级进阶常用技巧