Задать вопрос
@historydev
Редактирую файлы с непонятными расширениями

Как правильно распределить меню и его подпункты выводом из базы?

Добрый вечер.Скажите пожалуйста,как мне распределить меню по его подпунктам допустим:
id 2 - Свинина (Пункт)
parent_id 2 - Живойвес (Подпункт)
parent_id 3 - Мелковес (Подпункт 3-го уровня)
5ddad8df0cd3e869684079.png
  • Вопрос задан
  • 168 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
like-a-boss
@like-a-boss
Признайся,тебяТянетНаКодМужика,ты—программный гей
id 2 - Свинина (Пункт)
parent_id 2 - Живойвес (Подпункт)
parent_id 3 - Мелковес (Подпункт 3-го уровня)

Не уверен, что это правильно. Вернее уверен, что ты неправильно это понимаешь: parent_id 2 это подпункт для меню итема с id 2, а не второго уровня(в данном случае он второго уровня, но это просто совпадение). parent_id 3 это подпункт для меню итема с id 3, а не третьего уровня. У тебя же там не будет меню вложенностью в 16 пунктов, верно?)

Напиши ответ из базы, джейсон или что там будет, тогда накидаю вывод разметки.

Update. Держи:

let ul = '<ul>';

for (let i = 0; i < arr.length; i++) {
  let item = arr[i];
  ul += '<li>' + item.title + '</li>';
  
  for (let j = 0; j < item.children.length; j++) {
    let child = item.children[j];
    if (j === 0) {
      ul += '<ul>';
    }
    ul += '<li>' + child.title + '</li>';
    
    
    if (child.children) {
      for (let k = 0; k < child.children.length; k++) {
        let child2 = child.children[k];
        if (k === 0) {
          ul += '<ul>';
        }
        ul += '<li>' + child2.title + '</li>';
        
        
        if (child2.children) {
          for (let n = 0; n < child2.children.length; n++) {
            let child3 = child2.children[n];
            if (n === 0) {
              ul += '<ul>';
            }
            ul += '<li>' + child3.title + '</li>';

            if (n === child2.children.length - 1) {
              ul += '</ul>';
            }
          }
        }
      

        if (k === child.children.length - 1) {
          ul += '</ul>';
        }
      }
    }
       
    
    if (j === item.children.length - 1) {
      ul += '</ul>';
    }
  }
  
}
ul += '</ul>';
document.body.innerHTML = ul;


Проверяй уже сам, всё ли правильно.

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы