**表格 列 的删除**
这只一个删除列,还有插入行,删除行,插入列 ,感觉是不是太复杂了。有什么更好的思路
删除列 , 每个 td = { r:行c:列 maxr: 行+合并行,maxc:列+合并列数}
function deleteCol(col: number) {// col 要删除的列号
for (let i = 0, len = tableJson.value.body.length; i < len; i++) { // 循环每行
for (let x = tableJson.value.body[i].length - 1; x >= 0; x--) { // 循环每列
const in_index = getIndex(tableJson.value.body[i], col) // 获取插入的 位置
const td_rc = tableJson.value.body[i][x].rc
// console.log('第',i,'行',x,'列',td_rc );
if (td_rc.maxc >= col && td_rc.c < col) { // 穿过本列的单元格
td_rc.maxc = td_rc.maxc - 1
if (td_rc.maxr > td_rc.r) { // 假如有合并行,这里要跳过 合并行的循环
i = i + td_rc.maxr - td_rc.r
}
break
}
if (td_rc.c == col && td_rc.maxc > td_rc.c && td_rc.maxc > td_rc.c) { // 自已本身有向右或向下合并,则要把后面单元格显示出来
td_rc.c = td_rc.c + 1 // 即把这一列 向后移一位, 下面更新 col数据时 updateColData 时会 减 maxc 和 c
if (td_rc.maxr > td_rc.r) { // 有多行时,还要跳过 td_rc.maxr - td_rc.r 次循环
i = i + td_rc.maxr - td_rc.r
}
break
}
if (td_rc.c == col) { // 上面排除了多行多列合并,这里只考虑多行合并的
tableJson.value.body[i].splice(in_index, 1); // 删除此列, 并跳过 td_rc.maxr - td_rc.r 次循环
if (td_rc.maxr > td_rc.r) {
i = i + td_rc.maxr - td_rc.r
}
break
}
if (x == 0) { // 循环到最后,把本行唯一的 Td 删除
tableJson.value.body[i].splice(in_index, 1);
break
}
}
}
updateColData(col, 'sub') // 更新后面单元格的列号
rangeBoxStyle.value = 'range-box-none' // (更改类名来不显示)
startTd.value = undefined
endTd.value = undefined
afterOPER()
}
table 删除列函数的写法 请教
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- CSDN专家-showbo 2022-06-28 15:12关注
删除某个列应该简单吧,直接遍历tr,遍历td,指定列号在c~maxc之间,更新下colspan-1或者直接remove掉(只有一个)。参考这个最新的示例,和题主的目前代码结构和数据格式比较接近
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥20 机器学习能否像多层线性模型一样处理嵌套数据
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题
- ¥15 matlab不知道怎么改,求解答!!
- ¥15 永磁直线电机的电流环pi调不出来
- ¥15 用stata实现聚类的代码
- ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效