Почему не получается отсортировать таблицу по установленному классу

Подскажите пожалуйста что не так ? Мне нужно отсортировать свою таблицу по определенному столбу устанавливая в нее класс сортировки, но не сортируется пока не нажмешь на заголовок столбца. А мне нужно, что бы при загрузке стр, сортировка происходила сразу по столбцу в котором установлены классы : $('#table').DataTable();

Код :

$(document).ready(function () {
                $('th').each(function (col) {
                    $(this).hover(
                            function () {
                                $(this).addClass('focus');
                            },
                            function () {
                                $(this).removeClass('focus');
                            }
                    );
                    $(this).click(function () {
                        if ($(this).is('.asc')) {
                            $(this).removeClass('asc');
                            $(this).addClass('desc selected');
                            sortOrder = -1;
                        } else {
                            $(this).addClass('asc selected');
                            $(this).removeClass('desc');
                            sortOrder = 1;
                        }
                        $(this).siblings().removeClass('asc selected');
                        $(this).siblings().removeClass('desc selected');
                        var arrData = $('table').find('tbody >tr:has(td)').get();
                        arrData.sort(function (a, b) {
                            var val1 = $(a).children('td').eq(col).text().toUpperCase();
                            var val2 = $(b).children('td').eq(col).text().toUpperCase();
                            if ($.isNumeric(val1) && $.isNumeric(val2))
                                return sortOrder == 1 ? val1 - val2 : val2 - val1;
                            else
                                return (val1 < val2) ? -sortOrder : (val1 > val2) ? sortOrder : 0;
                        });
                        $.each(arrData, function (index, row) {
                            $('tbody').append(row);
                        });
                    });
                });
            });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="singletable table_sort">
  <thead>
    <tr class="text-center">
      <th class="px-2">Напряжение</th>
      <th class="px-2">Мощность</th>
      <th class="px-2 asc selected">Модель серводрайвера</th>
      <th class="px-2">Модель двигателя</th>
    </tr>
  </thead>
  <tbody>
    <tr class="text-center">
      <td class="">1</td>
      <td class="">2.5</td>
      <td class="">mod2</td>
      <td class="">serv3</td>
    </tr>
    <tr class="text-center">
      <td class="">2</td>
      <td class="">3.5</td>
      <td class="">mod1</td>
      <td class="">serv1</td>
    </tr>
    <tr class="text-center">
      <td class="">3</td>
      <td class="">5.5</td>
      <td class="">mod4</td>
      <td class="">serv2</td>
    </tr>
    <tr class="text-center">
      <td class="">4</td>
      <td class="">4.5</td>
      <td class="">mod3</td>
      <td class="">serv4</td>
    </tr>
  </tbody>
</table>


Ответы (1 шт):

Автор решения: Roman

Ваша таблица сортируется только по клику, код который изначально отсортирует таблицу без клика отстуствует. Можно создать функцию для выполнения сортировки и изменения DOM-a, и вызвать ее в нужных местах

$(document).ready(function () {
        $('th').each(function (col) {
            $(this).hover(
                    function () {
                        $(this).addClass('focus');
                    },
                    function () {
                        $(this).removeClass('focus');
                    }
            );
            function getSortedTable() {
                if ($(this).is('.asc')) {
                    $(this).removeClass('asc');
                    $(this).addClass('desc selected');
                    sortOrder = -1;
                } else {
                    $(this).addClass('asc selected');
                    $(this).removeClass('desc');
                    sortOrder = 1;
                }
                $(this).siblings().removeClass('asc selected');
                $(this).siblings().removeClass('desc selected');
                var arrData = $('table').find('tbody >tr:has(td)').get();
                arrData.sort(function (a, b) {
                    var val1 = $(a).children('td').eq(col).text().toUpperCase();
                    var val2 = $(b).children('td').eq(col).text().toUpperCase();
                    if ($.isNumeric(val1) && $.isNumeric(val2))
                        return sortOrder == 1 ? val1 - val2 : val2 - val1;
                    else
                        return (val1 < val2) ? -sortOrder : (val1 > val2) ? sortOrder : 0;
                });
                $.each(arrData, function (index, row) {
                    $('tbody').append(row);
                });
            }

            getSortedTable(); 
            
            $(this).click(function () {
                getSortedTable();
            });
        });
    });
→ Ссылка