欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

table中合并单元格的最大限制

程序员文章站 2022-07-14 17:56:15
...

问题的产生

在项目的开发过程中需要实现节点树,我利用了orgchart插件,但是在测试中发现,当超过1000个节点后节点树错位了。本来以为是插件的计算问题,细究发现是浏览器处理table合并单元格的最大限制问题。下方是简单的示例。

colspan横向合并单元格最大限制

本地测试colspan的最大限制,编写简易的table结构代码,设置两行单元格,第一行合并所有的单元格,第二行利用定时器不停插入单元格,当合并的单元格宽度不等于table的宽度时输出当前一行有多少单元格。

<table border="1" cellspacing="0" cellpadding="0">
	<tr>
		<td colspan="1" class="js_kkk">合并的单元格</td>
	</tr>
	<tr class="js_domWrite">
		<td>单个</td>
	</tr>
</table>
<p>表格总宽度:<span class="js_all"></span></p>
<p>合并的单元格宽度:<span class="js_dom"></span></p>
<p>合并的单元格数目:<span class="js_domnum"></span></p>
<script>
	$(function() {
		var gg=null;//设置定时器
		gg=setInterval(function(){
			if($('table')[0].scrollWidth==$('.js_kkk')[0].offsetWidth){//合并单元格宽度与table宽度相等
				$('.js_domWrite').append('<td>单个</td>');//再次插入一个单元格
				$('.js_kkk').attr('colspan',$('.js_domWrite td').length);//设置colspan的合并数目
			}else{//合并单元格宽度与table宽度不相等
				$('.js_all').html($('table')[0].scrollWidth);//显示当前table的宽度
				$('.js_dom').html($('.js_kkk')[0].offsetWidth);//显示当前合并单元格的宽度
				$('.js_domnum').html($('.js_domWrite td').length);//显示当前一行中单元格的数目
				clearInterval(gg);//清除定时器
			}
		},1)
	})
</script>

结果显示当单元格数目为1001时,出现问题:
table中合并单元格的最大限制

rowspan纵向合并单元格最大限制

本地测试rowspan的最大限制,编写简易的table结构代码,设置一行两列单元格,第一列合并所有的单元格,利用定时器不停在表格中插入一行一列单元格,当合并的单元格高度不等于table的高度时输出当前多少行。

<p>表格总高度:<span class="js_all"></span></p>
<p>合并的单元格高度:<span class="js_dom"></span></p>
<p>合并的单元格数目:<span class="js_domnum"></span></p>
<table border="1" cellspacing="0" cellpadding="0">
	<tbody class="js_domWrite">
		<tr>
			<td rowspan="1" class="js_kkk">合并的单元格</td>
			<td>一个</td>
		</tr>
	</tbody>
</table>
<script>
	$(function() {
		var gg=null;//设置定时器
		gg=setInterval(function(){
			if($('table')[0].scrollHeight!=$('.js_kkk')[0].offsetHeight){//合并单元格高度与table高度不相等
				$('.js_all').html($('table')[0].scrollHeight);//显示当前table的高度
				$('.js_dom').html($('.js_kkk')[0].offsetHeight);//显示当前合并单元格的高度
				$('.js_domnum').html($('.js_domWrite tr').length);//显示多少行
				clearInterval(gg);//清除定时器
			}else{//合并单元格高度与table高度相等
				$('.js_domWrite').append('<tr><td>一个</td></tr>');//再次插入一行一列
				$('.js_kkk').attr('rowspan',$('.js_domWrite tr').length);//更新rowspan的合并数目
			}
		},1)
	})
</script>

结果显示当表格行数为65535时,出现问题:
table中合并单元格的最大限制