浅谈如何实现table所有td(可跨行跨列)的值存进二维数组

本文介绍了如何通过JavaScript获取HTML表格中包含跨行跨列的td元素,并将它们的值存储到二维数组中。首先计算表格的行数和列数,接着遍历每个td元素,考虑rowspan和colspan属性的影响,最后将所有单元格的值填充到二维数组中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

var rows = 0, cols = 0, nums = 0;
var trs = document.getElementsByTagName("tr");
var row = document.getElementsByTagName("tr")[0];
var tds = row.getElementsByTagName("td");
for (var i = 0; i < tds.length; i++) {
	if (parseInt(tds[i].getAttribute("colspan")) > 0)
		cols += parseInt(tds[i].getAttribute("colspan"));
	else	
		cols++;
}
for (var i = 0; i < trs.length; i++) {
	var tds = trs[i].getElementsByTagName("td");
	for (var j = 0; j < tds.length; j++) {
		var rowspan = parseInt(tds[j].getAttribute("rowspan"));
		var colspan = parseInt(tds[j].getAttribute("colspan"));
		if (rowspan > 0 && colspan > 0)
			nums += rowspan * colspan;
		else {
			if (rowspan > 0)
				nums += rowspan;
			else if (colspan > 0)
				nums += colspan;
			else 
				nums++;
		}
	}	
}
rows = nums / cols;
var arr = new Array(rows);
var flag = new Array(rows);
for (var i = 0; i < rows; i++) {
	arr[i] = new Array(cols);
	for (var j = 0; j < cols; j++) 
		arr[i][j] = 0;
}
for (var i = 0; i < rows; i++) {
	flag[i] = new Array(cols);
	for (var j = 0; j < cols; j++) 
		flag[i][j] = 0;
}
for (var i = 0; i < trs.length; i++) {
	var tds = trs[i].getElementsByTagName("td");
	for (var j = 0; j < tds.length; j++) {
		var rowspan = parseInt(tds[j].getAttribute("rowspan"));
		var colspan = parseInt(tds[j].getAttribute("colspan"));
		for (var p = 0; flag[i][p] == 1; p++);
		if (colspan > 0 && rowspan > 0) {
			for (var m = 0; m < rowspan; m++) {
				for (var n = 0; n < colspan; n++) {
					arr[i + m][p + n] = tds[j].firstChild.nodeValue;
					flag[i + m][p + n] = 1;
				}
			}
		}
		else {
			if (colspan > 0) {
				for (var k = 0; k < colspan; k++) {
					arr[i][p + k] = tds[j].firstChild.nodeValue;
					flag[i][p + k] = 1;
				}
			}
			else {
				arr[i][p] = tds[j].firstChild.nodeValue;
				flag[i][p] = 1;
			}
			if (rowspan > 0) {
				for (var k = 0; k < rowspan; k++) {
					arr[i + k][p] = tds[j].firstChild.nodeValue;
					flag[i + k][p] = 1;
				}
			}
			else {
				arr[i][p] = tds[j].firstChild.nodeValue;
				flag[i][p] = 1;
			}
		}
		p++;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值