如果你想要一个“编辑网格”,即像结构的表格,可以让你做任何行的形式,使用CSS模仿表标签的布局:display:table
,display:table-row
,和display:table-cell
。
没有必要以整个表格的形式包装,并且不需要为表的每个表观行创建一个单独的表单和表。
改为:
<style>
DIV.table
{
display:table;
}
FORM.tr, DIV.tr
{
display:table-row;
}
SPAN.td
{
display:table-cell;
}
</style>
...
<div class="table">
<form class="tr" method="post" action="blah.html">
<span class="td"><input type="text"/></span>
<span class="td"><input type="text"/></span>
</form>
<div class="tr">
<span class="td">(cell data)</span>
<span class="td">(cell data)</span>
</div>
...
</div>
将整个TABLE包装在FORM中的问题是,任何和所有表单元素都将在提交时发送(也许这是所需但可能不是)。此方法允许您为每个“行”定义一个表单,并在提交时仅发送该行数据。
在TR标签(或围绕FORM)周围缠绕FORM标签的问题是HTML无效。FORM仍然允许像往常一样提交,但在这一点上,DOM被破坏。注意:尝试使用JavaScript获取FORM或TR的子元素,这可能会导致意想不到的结果。
请注意,IE7不支持这些CSS表格样式,IE8将需要一个doctype声明才能使其成为“标准”模式:(尝试这一个或相当的东西)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
支持显示的任何其他浏览器:table,display:table-row和display:table-cell应显示与使用TABLE,TR和TD标签时相同的css数据表。他们大多数都做。
请注意,你也可以模仿THEAD,TBODY,通过包装与另一个DIV你行组TFOOT display: table-header-group
,table-row-group
和table-footer-group
分别。
注意:这个方法唯一不能做的就是colspan。
看看这个例子:http : //jsfiddle.net/ZRQPP/