@Misha5
профессиональный бомж

Как найти все элементы li в многомерном списке ul?

Такая проблема: я пытаюсь найти все li в списке ul. При том, что во многих li есть вложенный подсписок со своими li. В итоге получается такое меню-дерево типо(слева):
disable-tree-menus.gif

Этот код находит только первый li вложенный в корневой ul с классом tree. И не реагирует на нажатие.
var ul = document.getElementsByClassName('tree')[0];
		console.log(ul);
		for(var li of ul.querySelectorAll('li')) {
			var span = document.createElement('span');
			li.prepend(span); //добавляем span в li перед контентом
			span.append(span.nextSibling); //добавляем в span весь контет li
		}
                ul.click(function(event) {
			if (event.target.tagName != 'SPAN') {
				return;
			}

			var childCont = event.target.parentNode.querySelector('ul');
			if (!childCont) return;

			childCont.hidden = !childCont.hidden;
		});


Задача, чтобы при клике на любой элемент, если у него есть подэлементы - показывать или скрывать их. Обычная менюшка, только многомерная.
  • Вопрос задан
  • 317 просмотров
Пригласить эксперта
Ответы на вопрос 1
@StockholmSyndrome
document.querySelector('ul').addEventListener('click', (e) => {
  if (e.target.tagName === 'LI') {
    const [ul] = e.target.children; 
    if (ul) {
      ul.hidden = !ul.hidden;
    }
  }
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
summer Ярославль
от 100 000 до 140 000 ₽
20 апр. 2024, в 14:27
3000 руб./за проект
20 апр. 2024, в 13:56
7000 руб./за проект
20 апр. 2024, в 13:52
7000 руб./за проект