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=0
为colspan=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喜欢骆驼版本…