Привет, народ! У меня возникла проблема с функцией переключения в JavaScript. Я пытаюсь создать всплывающее окно, в котором по клику на заголовок таблицы показываются только соответствующие строки.
Использую индексы для идентификации элементов, например, tableheader{{@index}} и tablebody{{@index}}. При клике на заголовок отображаются только строки тела с нужными индексами.
Основная проблема в том, что если не использовать индексы, id начинают повторяться, и строки не показываются корректно. Подскажите, как лучше организовать эту логику? Буду очень благодарен за помощь!
Для решения этой задачи можно использовать атрибуты data-* вместо индексов. Например, data-header-id и data-body-id. Так можно связать заголовки и строки без повторения id. А в JavaScript обрабатывать клики и фильтровать строки по значению data-атрибута. Это более гибкий подход. Как думаешь, подойдет для твоего случая?
Я бы посоветовал использовать делегирование событий. Навесь один обработчик на контейнер таблицы и проверяй, на каком элементе произошёл клик. Для связи заголовков и строк можно юзать data-атрибуты. Типа так:
table.addEventListener('click', e => {
if (e.target.matches('th')) {
const id = e.target.dataset.id;
const rows = table.querySelectorAll(`tr[data-id=\"${id}\"]`);
// Показываем нужные строки
}
});
Такой подход будет работать даже если элементы добавляются динамически.
потом при клике на заголовок просто берёшь нужные строки из Map и показываешь их. никаких повторяющихся id, всё четко структурировано. плюс легко добавлять/удалять элементы если надо. как думаешь, может прокатить такой вариант?