2013-10-04 139 views
3

我需要合并HTML表格中的中心单元格,但<td colspan="3" rowspan="3">&nbsp;</td>无法按预期工作。下面的图片显示了当我使用colspanrowspan时会发生什么 - 它会弄乱桌子。如何合并/合并不带colspan的HTML表格单元格

enter image description here

我应该如何合并9个细胞像上面的图像,而无需使用colspan。我真的想结合表格单元,所以他们不扩大。我可以使用HTML吗?还是需要使用jQuery解决方案?

回答

4

colspan是正确的做法。你遇到的问题是你添加了比你想要的更多的列。每次使用多于1的colspan时,都需要从该行敲下相应数量的<td>标签。此外,请记住使用rowspan可有效地将<td>添加到跨度覆盖的每一行。所以当你做一个colspan="3" rowspan="3"时,你需要敲掉包含跨越单元的行的两个单元,以及关闭下一行的两个行。

在与它的3×3孔的10×10表的情况下,你需要这个

<table> 
    <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td colspan="3" rowspan="3">&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    </tr> 
</table> 

编辑

我感觉大方和无聊,所以这里的一些PHP。你可以调整spansize和cellMax值,一切都应该继续工作。虽然粗糙的边缘。我没有测试任何可能的方式来打破它。

<?php 
function draw_table_with_hole($rows, $cols, $span_start_row, $span_start_col, $span_rows, $span_cols) { 
    $spanning = 0; 
    for ($row = 0; $row < $rows; $row++) { 
     if (--$spanning > 0) { 
      $cell = $span_cols; 
     } else { 
      $cell = 0; 
     } 
     echo "<tr>"; 
     for (; $cell < $cols; $cell++) { 
      $cell_code = "<td>&nbsp;</td>"; 

      if ($row === $span_start_row && $cell === $span_start_col) { 
       $cell_code = '<td colspan="' . $span_cols . '" rowspan="' . $span_rows . '.">&nbsp;</td>'; 
       $cell += ($span_cols - 1); 
       $spanning = $span_rows; 
      } 

      echo $cell_code; 
     } 
     echo "</tr>"; 
    } 
} 
?> 
<table> 
    <?php draw_table_with_hole(10, 10, 3, 4, 3, 3); ?> 
</table> 
+0

似乎很好的解决方案,但我在'for'循环中打印10 * 10表。所以这个解决方案不可能。任何想法..? – Miuranga

+1

我假设有一个外部循环打印行和一个内部循环打印单元格?在这种情况下,打印跨栏后必须调整内循环的循环计数器,然后在用完rowspan时调整它。 –

+0

是的,它使用两个循环,如你所说。感谢您的建议,我会尽力。 – Miuranga