Как скрыть строки таблицы без изменения общей ширины?
-
02-07-2019 - |
Вопрос
Есть ли способ скрыть строки таблицы, не затрагивая общую ширину таблицы?У меня есть JavaScript, который показывает/скрывает некоторые строки таблицы, но когда для строк установлено значение display: none;
, таблица сжимается, чтобы соответствовать содержимому видимых строк.
Решение
Если вы хотите сохранить общую ширину таблицы, вы можете проверить ее перед тем, как скрывать строку, и явно установить для свойства стиля ширины это значение:
table.style.width = table.clientWidth + "px";
table.rows[3].style.display = "none";
Однако это может привести к перекомпоновке отдельных столбцов при скрытии строки.Возможный способ смягчить это — добавить стиль к вашей таблице:
table {
table-layout: fixed;
}
Другие советы
Для справки: решение Левика работает отлично.В моем случае с использованием jQuery решение выглядело примерно так:
$('#tableId').width($('#tableId').width());
Правило CSS visibility: collapse
был разработан именно для этого.
tbody.collapsed > tr {
visibility: collapse;
}
После добавления этого CSS вы можете активировать видимость из JS с помощью:
tbody.classList.toggle('collapsed');
В CSS table-layout: fixed;
на вашей таблице указывает браузеру соблюдать размеры, указанные вами для высоты и ширины.Обычно это подавляет автоматическое изменение размера в браузере, если только вы не указали какие-либо подсказки относительно предпочтительных размеров строк и столбцов.
Вы можете сделать это, используя чистый HTML
<table border="1">
<colgroup>
<col width="150px" />
<col width="10px" />
<col width="220px" />
</colgroup>
<tr>
<td valign="top">1</td>
<td> </td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td> </td>
<td>4</td>
</tr>
</table>