Напишем сортируемую таблицу на JavaScript. Этот код добавляет прослушиватель событий к каждому элементу th, который сортирует массив строк на основе содержимого столбца, по которому щелкнули. Атрибут data-sort-direction используется для отслеживания текущего направления сортировки. Затем отсортированные строки добавляются к новому элементу tbody, который заменяет старый tbody в таблице.

Пример, который мы напишем:

powered by Advanced iFrame free. Get the Pro version on CodeCanyon.

HTML:

<table id="sortableTable">
  <thead>
    <tr>
      <th>Full name</th>
      <th>Age</th>
      <th>City</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Danny Rowe</td>
      <td>18</td>
      <td>Iwjove</td>
    </tr>
    <tr>
      <td>Marguerite Houston</td>
      <td>28</td>
      <td>Nojkafhib</td>
    </tr>
    <tr>
      <td>Ada Ortega</td>
      <td>26</td>
      <td>Rubalbu</td>
    </tr>
    <tr>
      <td>Ruth Park</td>
      <td>33</td>
      <td>Cabevib</td>
    </tr>
    <tr>
      <td>Chad Ortega</td>
      <td>40</td>
      <td>Jucugez</td>
    </tr>
    <!-- Добавьте больше строк здесь -->
  </tbody>
</table>

CSS:

table {
  width: 100%;
  border-collapse: collapse;
  user-select: none;
}
th {
  cursor: pointer;
}
td,
th {
  border: 1px solid #ddd;
  padding: 8px;
  text-align: left;
}
tr:nth-child(even) {
  background-color: #f2f2f2;
}

JavaScript:

const table = document.querySelector("#sortableTable");
const th = table.querySelectorAll("th");
let tbody = table.querySelector("tbody");
let rows = [...tbody.rows];

th.forEach((header) => {
  header.addEventListener("click", function () {
    let columnIndex = header.cellIndex;
    let sortDirection =
      header.getAttribute("data-sort-direction") === "asc" ? "desc" : "asc";
    header.setAttribute("data-sort-direction", sortDirection);

    rows.sort((a, b) => {
      let aValue = a.cells[columnIndex].textContent;
      let bValue = b.cells[columnIndex].textContent;

      if (sortDirection === "asc") {
        return aValue > bValue ? 1 : -1;
      } else {
        return bValue > aValue ? 1 : -1;
      }
    });

    tbody.remove();
    tbody = document.createElement("tbody");
    rows.forEach((row) => tbody.appendChild(row));
    table.appendChild(tbody);
  });
});

Warning: Undefined variable $aff_bottom_mark in /sites/codelab.pro/wp-content/themes/myTheme/dist/partials/post/post_base.php on line 81

Warning: Undefined variable $aff_bottom_info in /sites/codelab.pro/wp-content/themes/myTheme/dist/partials/post/post_base.php on line 85