How to easily add/remove cells from a Table (Shifting existent cells)

天大地大妈咪最大 提交于 2019-12-30 11:02:51

问题


I want a table to automatically align cells to be two per row, meaning that if a add/remove a cell, cells will shift to be two per row (with one on last row if total number of cells is odd).

Example:

<table>

<tr>
<td>old1</td> <td>old2</td>
</tr>


<tr>
<td>old3</td> <td>old4</td>
</tr>

</table>

To this:

<table>

<tr>
<td>NEW</td> <td>old1</td>
</tr>


<tr>
<td>old2</td> <td>old3</td>
</tr>


<tr>
<td>old4</td>
</tr>

</table>

Notice the automatically added row.


回答1:


I'll show you three ways to accomplish what you need,

  • css3 Using flex (modern browsers only)
  • css Using inline-table (problem with cell height but usable as sort-of fallback)
  • jquery Using standard <table> (All browsers!)

Using CSS3's FLEX

.table{
  display: flex;
  flex-wrap: wrap;
}
.cell{
  width:50%;
  background:#ddd;
}
<div class="table">
  <div class="cell">NEW</div>
  <div class="cell">OLD1</div>
  <div class="cell">OLD2</div>
  <div class="cell">OLD3<br>new line</div>
  <div class="cell">OLD4</div>
</div>

Using inline-table (issue with cell height)

display: table;   for the parent element and
display: inline-table for the inner DIVs:

.table{
  display:table;
}
.cell{
  display:inline-table;
  width:50%;     /* With percentage you simulate "how-many-per-Row" */
  background:#ddd;
}
<div class="table">
  <div class="cell">NEW</div>
  <div class="cell">OLD1</div>
  <div class="cell">OLD2</div> <!-- Works but notice this cell height  -->
  <div class="cell">OLD3<br>new line</div> 
  <div class="cell">OLD4</div>
</div>

You could use the inline-table as a fallback for older browsers - it's not the exact same result but without JavaScript it's the best you could get.

Take a look in the specs about the display property: https://developer.mozilla.org/en-US/docs/Web/CSS/display


Using <table>, <tr> and <td> and JavaScript (jQuery)

If you want to stick to good 'ol table elements you can use "a bit" of jQuery.
In that case it's a bit more complicated (see code-comments):

jQuery(function($){ // DOM is now ready

  var $table = $("table"); // Get your table
  var maxRowCells = 2;     // only 2-per-Row
  var counter = 0;         // just a dummy counter

  function prependNewCell(){

    var $newCell = $("<td/>", {html: "NEW"+(++counter)});

    // Is the last row full?
    if($table.find("tr:last td").length == maxRowCells){
      // If true, append a new TR to TABLE to shift TD's to
      $table.append( $("<tr/>") ); 
    }


    // Shift all last TD's to the next row:
    $table.find("tr:not(:last)").each(function(){
      var $tdLast = $(this).find("td").last();
      $(this).next("tr").prepend( $tdLast );
    });

    // Finally. Prepend the new TD element to the first TR
    $table.find("tr").first().prepend( $newCell );

  }

  $("button").on("click", prependNewCell);

});
td{
  width:50%;
  background:#ddd;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>ADD NEW CELL ON TOP</button>

<table>
  <tr>
    <td>OLD1</td>
    <td>OLD2</td>
  </tr>
  <tr>
    <td>OLD3</td>
    <td>OLD4</td>
  </tr>
</table>



回答2:


table {
   empty-cells: hide;      
}


来源:https://stackoverflow.com/questions/33202614/how-to-easily-add-remove-cells-from-a-table-shifting-existent-cells

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!