Как сделать slideToggle для таблиц html

· jQuery и Снипеты · 3 мин чтения

Проблема в том, что jQuery функция slideToggle() очень плохо работает с таблицами и поэтому только функции .hide(), .show(), fadeIn() и fadeOut() работают как должны.

Чтобы заставить slideToggle() работать, я написал небольшой скрипт, который выполняет данную функцию.

Демо

HTML

Для начала создадим простой каркас из HTML.

<table id="table">
    <thead>
        <tr>
            <th>Название</th>
            <th>Название</th>
            <th>Название</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Скрыть</td>
            <td>Скрыть</td>
            <td>Скрыть</td>
        </tr>
        <tr>
            <td>Скрыть</td>
            <td>Скрыть</td>
            <td>Скрыть</td>
        </tr>
        <tr>
            <td>Скрыть</td>
            <td>Скрыть</td>
            <td>Скрыть</td>
        </tr>
    </tbody>
</table>
<br><br>
<button>Показать все</button>

 

CSS

Так же нужно добавить немного стилей для таблицы, чтобы она более менее аккуратно выглядела.

table {
    border: 1px solid #000;
}
table thead th {
    font-weight: bold;
    text-align: center;
    border-bottom: 1px solid #000;
    border-right: 1px solid #000;
}
table thead th:last-child {
    border-right: 0 !important;
}
table thead th, table tbody td {
    padding: 10px;
    font-size: 12pt;
    font-family: Verdana, Tahoma;
}
table tbody td {
    border-bottom: 1px solid #000;
    border-right: 1px solid #000;
}
table tbody td:last-child {
    border-right: 0 !important;
}
table tbody tr:last-child td {
    border-bottom: 0 !important;
}
table tbody tr:nth-child(even) {
    background-color: #eee;
}

 

jQuery

$(function () {
    $('#table tr').each(function(){
        $content = $(this).find('td').html(); // html of tr
        $height_tr = $(this).height(); // Height tr 
        $(this).find('td').html('<div class="hide" >' + $content + '</div>');
                     
        $(this).css('height', $(this).height());
    });
    
    $('tr').on('click', function () {
        $(this).slideToggle(700);
        $(this).find('div.hide').slideToggle(700);
    });
    
    $('button').on('click', function() {
        $('tbody tr, tbody tr .hide').slideDown();
    });
});

На этом все. Если у вас есть какие-либо вопросы — задавайте их в комментарии ниже к этой записи.