Sandbox Test Page 3

Версия 5.1 от Руслан Савельев на 2025/06/04 10:15

<! Чекбоксы управления >
<label><input type="checkbox" class="toggle-col" data-col="2" checked> Показать столбец 2</label>
<label><input type="checkbox" class="toggle-col" data-col="3" checked> Показать столбец 3</label>
<label><input type="checkbox" class="toggle-row" data-row="2" checked> Показать строку 2</label>
<label><input type="checkbox" class="toggle-row" data-row="3" checked> Показать строку 3</label>

<br><br>

<! Таблица >
<table id="myTable" border="1">
  <thead>
    <tr>
      <th>Колонка 1</th>
      <th>Колонка 2</th>
      <th>Колонка 3</th>
    </tr>
  </thead>
  <tbody>
    <tr data-row="1">
      <td>1-1</td><td>1-2</td><td>1-3</td>
    </tr>
    <tr data-row="2">
      <td>2-1</td><td>2-2</td><td>2-3</td>
    </tr>
    <tr data-row="3">
      <td>3-1</td><td>3-2</td><td>3-3</td>
    </tr>
  </tbody>
</table>

<script>
  При загрузке страницы
  document.addEventListener('DOMContentLoaded', function() {
    const checkboxesCol = document.querySelectorAll('.toggle-col');
    const checkboxesRow = document.querySelectorAll('.toggle-row');
    const table = document.getElementById('myTable');

    function updateColumns() {
      checkboxesCol.forEach(cb => {
        const colIndex = parseInt(cb.getAttribute('data-col'), 10);
        const display = cb.checked ? '' : 'none';

         Скрываем/показываем ячейки в каждой строке для нужного столбца
        table.querySelectorAll('tr').forEach(row => {
          const cells = row.children;
          if(cells.length >= colIndex) {
            cells[colIndex - 1].style.display = display;
          }
        });
      });
    }

    function updateRows() {
      checkboxesRow.forEach(cb => {
        const rowNum = cb.getAttribute('data-row');
        const display = cb.checked ? '' : 'none';
        const row = table.querySelector('tbody tr[data-row="' + rowNum + '"]');
        if (row) row.style.display = display;
      });
    }

     Навесить обработчики событий на чекбоксы
    checkboxesCol.forEach(cb => cb.addEventListener('change', () => {
      updateColumns();
    }));

    checkboxesRow.forEach(cb => cb.addEventListener('change', () => {
      updateRows();
    }));

     Инициализация видимости
    updateColumns();
    updateRows();
  });
</script>