**表格 列 的删除**
这只一个删除列,还有插入行,删除行,插入列 ,感觉是不是太复杂了。有什么更好的思路
删除列 , 每个 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掉(只有一个)。参考这个最新的示例,和题主的目前代码结构和数据格式比较接近
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录