Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.02.2019, 10:20
Аватар для madeas
Профессор
Отправить личное сообщение для madeas Посмотреть профиль Найти все сообщения от madeas
 
Регистрация: 13.04.2018
Сообщений: 232

Сворачивание таблиц на js
День добрый.

Есть большая таблица, которую переверстывать немного напряжно.
Можно ли через js сделать из этой таблицы аккордеоны?

Вот грубая модель: https://jsfiddle.net/madeas/hyLews4k/2/

Надо сделать, чтобы по клику на строку с заголовком(с классом) все строки до следующего заголовка сворачивались. Можно с применением jquery.

Возможно ли такое реализовать, или лучше создавать внутри таблицы еще таблицу и все в таком духе?

Последний раз редактировалось madeas, 22.02.2019 в 10:25.
Ответить с цитированием
  #2 (permalink)  
Старый 22.02.2019, 13:46
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

Если сразу в разметке сделать 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>

Последний раз редактировалось SuperZen, 22.02.2019 в 13:57. Причина: !
Ответить с цитированием
  #3 (permalink)  
Старый 22.02.2019, 14:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

<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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу JS разработчиков в лесу Kenjuy27 Работа 0 18.07.2018 09:06
Диалог между HTML и внешним JS в контексте расширения GoogleChrome ev1lart Events/DOM/Window 0 26.04.2017 19:25
BackEnd/FrontEnd Developer (Native JS) Abab Работа 0 25.12.2016 10:56
JS <-> Server Js. Severtain Общие вопросы Javascript 1 05.11.2011 15:36
Картинка обрабатывается js 4yBaK Общие вопросы Javascript 10 11.09.2011 09:28