html要转为数据格式的时候尽管用的很少,但是在爬虫或者浏览器的时候还是非常有用的。于是写了一个html的table转数组格式数据。
处理了colspan和rowspan的问题,主要用于table导出csv的数据
直接上代码吧
/**
* html的table转数组格式数据,处理了colspan和rowspan的问题,用于table导出csv的数据组织
* @param {Element} htmlelemet
* @param {int} 可选参数,填充colspan和rowspan的方式,0--不填充,1--用原值填充
*/
function getTableData(table, fill = 1) {
const trs = table.querySelectorAll("tr");
if (trs.length == 0) {
return data;
}
const data = Array.from(trs).map(tr => //遍历所有行
Array.from(tr.querySelectorAll("th,td"))//遍历行内的所有单元格
.map(a => a.innerText)//只保留文本
)
//采用逆序遍历tr和td填充数组
for (let tri = trs.length - 1; tri--; tri >= 0) {
const tr = trs[tri]
const tds = tr.querySelectorAll("th,td")
for (let tdi = tds.length - 1; tdi--; tdi >= 0) {
const td = tds[tdi]
//获取colspan rowspan 默认值为1
const colspan = td.attributes.colspan && parseInt(td.attributes.colspan.value) || 1
const rowspan = td.attributes.rowspan && parseInt(td.attributes.rowspan.value) || 1
//先处理行,因为列需要复制行的数据
if (colspan > 1) {
const value = data[tri][tdi]
//不填充用空字符串,填充直接用value
data[tri].splice(tdi, 1, Array.from({ length: colspan }, (v, i) => fill || i ==