{ const level = parseInt(header.tagName.substring(1)); // Присвоим id заголовку если его нет if (!header.id) { header.id = header.textContent.trim().toLowerCase().replace(/\s+/g, '-').replace(/[^\w\-]+/g, ''); } // Создаем пункт списка const li = document.createElement('li'); const a = document.createElement('a'); a.href = '#' + header.id; a.textContent = header.textContent; li.appendChild(a); // Управление уровнем вложенности if (level === currentLevel) { // Одинаковый уровень — добавляем в текущий список currentList.appendChild(li); } else if (level > currentLevel) { // Создаем вложенный список const newList = document.createElement('ul'); newList.appendChild(li); // Добавляем новый список как вложенный к последнему пункту предыдущего уровня listsStack[listsStack.length - 1].lastElementChild.appendChild(newList); listsStack.push(newList); currentList = newList; currentLevel = level; } else { // Возврат на уровень выше — вынимаем списки из стека while (level < currentLevel && listsStack.length > 1) { listsStack.pop(); currentLevel--; } currentList = listsStack[listsStack.length - 1]; currentList.appendChild(li); } }); tocContainer.appendChild(tocList); });