Colspan所有列

我怎样才能指定一个td标签应该跨越所有的列(当表格中的列的确切数量是variables/难以确定何时呈现的HTML)? w3schools提到你可以使用colspan="0" ,但是并没有说明浏览器支持哪个值(IE 6在我们的列表中支持)。

编辑:似乎将colspan设置为大于您可能具有的理论列数的值将会工作,但如果将table-layout设置为fixed,则将无法工作。 使用colspan的大量自动布局有什么不利吗? 有没有更正确的方法呢?

我有IE 7.0,Firefox 3.0和Chrome 1.0

TD中的colspan =“0”属性并不跨越 上述任何浏览器中的所有TD。

也许不build议作为适当的加价实践,但是如果你给出比可能的总数更高的价格。 其他行中的列将会横跨所有列。

当table-layout CSS属性设置为fixed时,这不起作用。

再次,这不是一个完美的解决scheme,但似乎在上述3浏览器版本的表格布局CSS属性是自动的 。 希望这可以帮助。

警告如下面的评论中提到的,这实际上与colspan="100" 因此,这个解决scheme将打破与CSS table-layout: fixed或超过100列。

这是一个黑客,并不能确保你的行横跨所有列

只需使用这个:

 colspan="100%" 

它适用于Firefox 3.6,IE 7和Opera 11! (我想别人,我不能尝试)

如果你想制作一个横跨所有列的“标题”单元格作为表格的标题,你可能需要使用标题标记( http://www.w3schools.com/tags/tag_caption.asp / https:// developer.mozilla.org/en-US/docs/Web/HTML/Element/caption )这个元素就是为了这个目的。 它的行为像一个div,但不跨越表的父母的整个宽度(就像一个div将在同一位置(不要在家里试试这个)),而是跨越表。 有一些跨浏览器的问题与边界等(我可以接受)。 无论如何,你可以使它看起来像一个跨越所有列的单元格。 在里面,你可以通过添加div元素来创build行。 我不知道你是否可以插入tr元素之间,但这将是一个黑客我猜(所以不build议)。 另一种select是与浮动divs搞乱,但这是恶作剧!

 <table> <caption style="gimme some style!"><!-- Title of table --></caption> <thead><!-- ... --></thead> <tbody><!-- ... --></tbody> </table> 

 <div> <div style="float: left;/* extra styling /*"><!-- Title of table --></div> <table> <thead><!-- ... --></thead> <tbody><!-- ... --></tbody> </table> <div style="clear: both"></div> </div> 

对于IE 6,您需要等于表中的列数。 如果你有5列,那么你会想: colspan="5"

原因是IE不同地处理colspans ,它使用HTML 3.2规范:

IE实现了HTML 3.2定义,它将colspan=0colspan=1

该错误是有据可查的 。

如果您使用的是jQuery(或者不介意添加它),那么这将比这些黑客更好地完成工作。

 function getMaxColCount($table) { var maxCol = 0; $table.find('tr').each(function(i,o) { var colCount = 0; $(o).find('td:not(.maxcols),th:not(.maxcols)').each(function(i,oo) { var cc = Number($(oo).attr('colspan')); if (cc) { colCount += cc; } else { colCount += 1; } }); if(colCount > maxCol) { maxCol = colCount }; }); return maxCol; } 

为了简化实现,我装饰任何td / th我需要调整类如“maxCol”然后我可以做到以下几点:

 $('td.maxcols, th.maxcols').each(function(i,o) { $t = $($(o).parents('table')[0]); $(o).attr('colspan', getMaxColCount($t)); }); 

如果你find一个实现,这将不起作用,不要抨击的答案,在评论中解释,我会更新,如果可以被覆盖。

另一个工作,但丑陋的解决scheme: colspan="100" ,其中100是一个大于你需要colspan总列数值。

根据W3C的说法, colspan="0"选项只对COLGROUP标签有效。

你可以用这样的东西来确定表中的列数:

 var firstRow = tableBody.getElementsByTagName('tr')[0]; var numcols = firstRow.getElementsByTagName('td').length; 

现在使用此列数作为您的列跨度。 这假设你已经有了对表的body元素的引用,但是这应该是直接的。

只是想添加我的经验和答案。
注意:只有当你有一个预定义的table和一个tr ,但是在你的行(例如通过AJAX)dynamic加载的时候,它才起作用。

在这种情况下,您可以计算th一个标题行中的数量,并使用该数字跨越整个列。

当没有find任何结果时,如果要传递消息,则可能需要此选项。

在jQuery中是这样的,其中table是你的input表:

 var trs = $(table).find("tr"); var numberColumns = 999; if (trs.length === 1) { //Assume having one row means that there is a header var headerColumns = $(trs).find("th").length; if (headerColumns > 0) { numberColumns = headerColumns; } } 

根据规范colspan="0"应导致表宽度td。

但是,这只有当你的桌子有宽度时才是真的! 一个表格可能包含不同宽度的行。 所以,如果你定义了一个colgroup ,渲染器就知道表的宽度 ! 否则,colspan =“0”的结果是不确定的…

http://www.w3.org/TR/REC-html40/struct/tables.html#adef-colspan

我无法在旧版浏览器上testing它,但这是自4.0以来的规范的一部分…

我有同样的问题 – 我如何解决我的问题..把任何控制你想跨越一个TD

也许我是一个直率的思想家,但是我有点困惑,你不知道你的表的列号?

顺便说一句,IE6不支持colspan =“0”,有或没有定义colgroup。 我也尝试使用add和th来生成列的组,但浏览器不承认formscolspan =“0”。

我已经尝试过在Windows和Linux上的Firefox 3.0,它只适用于严格的文档types。

你可以在几个bowser检查testing

http://browsershots.org/http://hsivonen.iki.fi/test/wa10/tables/colspan-0.html

我在这里find了testing页http://hsivonen.iki.fi/test/wa10/tables/colspan-0.html

编辑:请复制并粘贴链接,格式不会接受链接中的双协议部分(或者我不是很聪明,以正确的格式)。

尝试使用“colSpan”而不是“colspan”。 IE喜欢骆驼版本…