Сворачивание таблиц на js
День добрый.
Есть большая таблица, которую переверстывать немного напряжно. Можно ли через js сделать из этой таблицы аккордеоны? Вот грубая модель: https://jsfiddle.net/madeas/hyLews4k/2/ Надо сделать, чтобы по клику на строку с заголовком(с классом) все строки до следующего заголовка сворачивались. Можно с применением jquery. Возможно ли такое реализовать, или лучше создавать внутри таблицы еще таблицу и все в таком духе? |
Если сразу в разметке сделать data-* атрибуты можно написать проще... ) или MVVM в помощь...
<html>
<head>
<style>
.text-center {
text-align: center;
background-color: #333;
color: #fff;
}
.hidden {
display: none;
}
</style>
<script>
document.addEventListener('DOMContentLoaded', function () {
let turn = 0
document.querySelector('table.collapseable').querySelectorAll('tr').forEach(tr => {
if (tr.classList.contains('turn')) {
turn++
(function (turn) {
tr.addEventListener('click', function (e) {
document.querySelectorAll(`tr[data-turn='${turn}']:not(.turn)`)
.forEach(_tr => _tr.classList.toggle('hidden'))
})
})(turn)
}
tr.dataset.turn = turn;
})
})
</script>
</head>
<body>
<table class="collapseable">
<tr class="turn">
<td colspan="4" class="text-center">title</td>
</tr>
<tr>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
</tr>
<tr>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
</tr>
<tr>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
</tr>
<tr class="turn">
<td colspan="4" class="text-center">title</td>
</tr>
<tr>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
</tr>
<tr class="turn">
<td colspan="4" class="text-center">title</td>
</tr>
<tr>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
</tr>
<tr>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
</tr>
</table>
</body>
</html>
|
<style>
#toggle {
width: 100%;
}
#toggle tbody tr:not(:first-child) {
display: none;
}
</style>
<table id="toggle">
<tbody>
<tr class="turn">
<th colspan="4" class="text-center">title</th>
</tr>
<tr>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
</tr>
<tr>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
</tr>
<tr>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
</tr>
</tbody>
<tbody>
<tr class="turn">
<th colspan="4" class="text-center">title</th>
</tr>
<tr>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
</tr>
<tr>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
</tr>
<tr>
<td>text</td>
<td>text</td>
<td>text</td>
<td>text</td>
</tr>
</tbody>
</table>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$('#toggle').on('click', 'tr.turn', function() {
$(this).closest('tbody').children().slice(1).slideToggle(0)
});
</script>
|
| Часовой пояс GMT +3, время: 09:39. |