Скрыть пустые ячейки в таблице

Я хочу, чтобы скрыть пустые ячейки в таблице. Вот мой код:

$(function() {
  $(".empty").each(hideCellIfEmpty);
});

function hideCellIfEmpty() {
  var theCell = $(this);
  if (theCell.html().length == 0) {
    hideSoft(theCell);
  }
}

function hideSoft(jQElement) {
  jqElement.css('visibility', 'hidden');
}
table.empty {
  width: 350px;
  border-collapse: collapse;
  empty-cells: hide;
}
td.empty {
  border-style: solid;
  border-width: 1px;
  border-color: blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<table class="empty">
  <tr>
    <th></th>
    <th>Title one</th>
    <th>Title two</th>
  </tr>
  <tr>
    <th>Row Title</th>
    <td class="empty">value</td>
    <td class="empty">value</td>
  </tr>
  <tr>
    <th>Row Title</th>
    <td class="empty">value</td>
    <td class="empty"></td>
  </tr>
</table>

вы можете видеть, пустая ячейка отображается во 2-й строке. Но я хочу это скрыть. Более того, я не хочу использовать border-collapse:separate. Можно ли скрыть пустую ячейку с помощью border-collapse:collapse? Я также хочу знать, почему это показывает пустые клетки.

С. П., Используя border-collapse: separate работает и не показывает пустой ячейки.

$(function() {
  $(".empty").each(hideCellIfEmpty);
});

function hideCellIfEmpty() {
  var theCell = $(this);
  if (theCell.html().length == 0) {
    hideSoft(theCell);
  }
}

function hideSoft(jQElement) {
  jqElement.css('visibility', 'hidden');
}
table.empty {
  width: 350px;
  border-collapse: separate;
  empty-cells: hide;
}
td.empty {
  border-style: solid;
  border-width: 1px;
  border-color: blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<table class="empty">
  <tr>
    <th></th>
    <th>Title one</th>
    <th>Title two</th>
    <th>Title three</th>
  </tr>
  <tr>
    <th>Row Title</th>
    <td class="empty">value</td>
    <td class="empty">value</td>
    <td class="empty">value</td>
  </tr>
  <tr>
    <th>Row Title</th>
    <td class="empty">value</td>
    <td class="empty"></td>
    <td class="empty">value</td>
  </tr>
</table>

но это не отвечает на эти вопросы:

  1. почему пустые-ячейки отображаются, когда - это ?

  2. почему пустые ячейки не отображаются, когда - это ?

6 ответов


если ваш сайт не требует поддержки IE 8 и ниже, вы можете просто использовать CSS :empty псевдо-класс:

td:empty {
  visibility: hidden;
}

table.empty {
  width: 350px;
  border-collapse: collapse;
  empty-cells: hide;
}
td.empty {
  border-style: solid;
  border-width: 1px;
  border-color: blue;
}
td:empty {
  visibility: hidden;
}
<table class="empty">
  <tr>
    <th></th>
    <th>Title one</th>
    <th>Title two</th>
  </tr>
  <tr>
    <th>Row Title</th>
    <td class="empty">value</td>
    <td class="empty">value</td>
  </tr>
  <tr>
    <th>Row Title</th>
    <td class="empty">value</td>
    <td class="empty"></td>
  </tr>
</table>

подробнее о :empty псевдо-класс можно найти в https://developer.mozilla.org/en-US/docs/Web/CSS/:empty


при условии, что все ячейки, которые вы хотите скрыть класс .пустой () я придумал этот кусок jQuery:

$(function(){
    $(".empty").each(hideCellIfEmpty);
});

function hideCellIfEmpty(){
    var theCell = $(this);
    if(theCell.html().length == 0){
        theCell.hide();
    }           
}​

иииииии... это, кажется, работает. :)

но как hide() не сохраняет пространство, в которое вы сталкиваетесь проблема если вы пытаетесь сделать форму пончика.
К счастью, там другой вопрос обсуждение этой проблемы, и ответ заключается в использовании

css('visibility','hidden')

ведьма, вы также можете найти в эта скрипка.


нашел этой решение по хорошей статье, которую я читал.

Я надеюсь, что это сработает и для вас:

table {
   empty-cells: hide;
}

С наилучшими пожеланиями!


попробовать следующее

<style type="text/css">
table.empty{
    width:350px;
    border-collapse: collapse;
    empty-cells:hide;
}
td.normal{
    border-style:solid;
    border-width:1px;
    border-color: blue;
}   
td.empty{      
    style:'display=none'
}

</style>
<table >
<tr>
<th></th>
<th>Title one</th>
<th>Title two</th>
</tr>
<tr>
<th>Row Title</th>
<td class="normal">value</td>
<td class="normal">value</td>
</tr>
<tr>
<th>Row Title</th>
<td class="normal">value</td>
<td class="empty"></td>
</tr>
</table>​

просто используется CSS:empty-cells: hide;

браузер поддерживает: Проверил Ссылку или Ссылка 2

table { 
    border-collapse: separate;
    empty-cells: hide;
}

NB: вы не можете использовать border-collapse: collapse; потому что это отключить посмотреть пустая ячейка скрыть

/******Call-Padding**********/

table { 
  /***
  border-collapse: collapse; #Not use it     ***/
    border-collapse: separate;
    empty-cells: hide;
}

td { 
  border: 1px solid red;
  padding: 10px;
}
	<table>
		<tr>
			<th>Head1 </th>
			<th>Head2 </th>
			<th>Head3 </th>
			<th>Head4 </th>
		</tr>
		<tr>
			<td>11</td>
			<td>12</td>
			<td>13</td>
			<td>14</td>
		</tr>
		<tr>
			<td>15</td>
			<td>16</td>
			<td></td>
			<td>18</td>
		</tr>
		<tr> 
			<td>19</td>
			<td></td>
			<td>21</td>
			<td>22</td>
		</tr>
		<tr>
			<td></td>
			<td>24</td>
			<td>25</td>
			<td>26</td>
		</tr>
	</table>

вот еще одно решение, так как td:empty не работает для меня:

<style type="text/css">
    table {
        border-spacing: 0px; // removes spaces between empty cells
        border: 1px solid black;
    }
    tr, td {
        border-style: none; // see note below
        padding: 0px; // removes spaces between empty cells
        line-height: 2em; // give the text some space inside its cell
        height: 0px; // set the size of empty cells to 0
    }
</style>

данный код полностью удалит любое пространство, которое в противном случае заняла бы пустая строка. К сожалению, вы должны установить border-style: none;, иначе границы пустых ячеек будут окрашены в любом случае (что приводит к толстым линиям).