从没有填充、没有边距和没有边框的表格单元格与列的宽度相同的原则开始。
现在我们要做的就是在表格的末尾添加一个虚拟表格行。
<table>
<colgroup>
<col></col>
<col id='col2'></col>
<col></col>
<col></col>
</colgroup>
<thead>
<tr><th colspan='4'>This table has 4 colums. How do I get the <col> widths?</tr>
</thead>
<tbody>
<tr><th colspan='2'>colspan 2</th><th colspan='2'>colspan 2</th></tr>
<tr><td colspan='3'>colspan 3</td><td>colspan 1</td></tr>
<tr><td>colspan 1</td><td colspan='3'>colspan 3</td></tr>
<tr><th>colspan 1</th><th colspan='2'>colspan 2</th><th>colspan 1</th></tr>
<tr class="notseen nopad">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
然后样式化
tr.notseen {
display: none;
}
tr.nopad > td {
padding: 0;
border: 0;
margin: 0;
}
然后,在您的 jQuery 中,只需在计算其宽度之前使该行可见。(如果当你取<td>
它none
的宽度时,它的显示值是 0,你总是会得到值 0。)
var str_ = '';
$('table > tbody > tr:last-child').removeClass('notseen');
$('table > tbody > tr:last-child > td').each(function(i) {
$col = $('table > colgroup > col').eq(i);
$td = $(this);
col_width_ = $col.width();
td_width_ = $td.width();
// alert message can be used in FireFox to verify that values match
alert('col: ' + col_width_ + ' ::: td: ' + td_width_);
str_ = str_ + 'col'+i+': ' + td_width_ + 'px; ';
});
$('table > tbody > tr:last-child').addClass('notseen');
alert(str_); // alert the width of each column in table
如果您出于某种原因无法在 HTML 标记中添加虚拟行,则始终可以在 jQuery 脚本中动态添加它。