// ============================ // 1. PC 아코디언 + 화살표 상태 유지 // ============================ const menuItems = document.querySelectorAll('.depth1 > li'); menuItems.forEach(item => { const btn = item.querySelector('button'); btn.addEventListener('click', () => { const isActive = item.classList.contains('active'); menuItems.forEach(i => i.classList.remove('active')); if(!isActive){ item.classList.add('active'); } }); }); // ============================ // 3. 드롭다운 토글 // ============================ document.querySelectorAll('.select > button').forEach(btn=>{ btn.addEventListener('click', function(e){ e.stopPropagation(); const parent = this.parentElement; parent.classList.toggle('active'); document.querySelectorAll('.select').forEach(el=>{ if(el !== parent) el.classList.remove('active'); }); }); }); // ============================ // 4. 1차 선택 → 2차 생성 // ============================ document.querySelectorAll('.depth1Select li').forEach(li=>{ li.addEventListener('click', function(){ const index = this.dataset.index; const text = this.innerText; depth1Select.querySelector('button').innerHTML = text + ' '; renderDepth2(index); depth1Select.classList.remove('active'); }); }); // ============================ // 5. 2차 생성 함수 (핵심) // ============================ function renderDepth2(index){ depth2List.innerHTML = ''; depthData[index].forEach(menu=>{ const li = document.createElement('li'); const a = document.createElement('a'); a.href = menu.url; a.innerText = menu.name; li.appendChild(a); depth2List.appendChild(li); }); // 첫번째 자동 표시 depth2Select.querySelector('button').innerHTML = depthData[index][0].name + ' '; } // ============================ // 6. 초기 실행 (모바일 핵심 개선) // 초기 메뉴 세팅 (현재 페이지 기준) // ============================ window.addEventListener('DOMContentLoaded', function(){ const currentUrl = window.location.pathname; // ✅ 절대경로 유지 const depth1Btns = document.querySelectorAll('.depth1 > li'); let foundIndex = 0; let foundText = ''; // 현재 URL 기준으로 메뉴 찾기 depthData.forEach((group, i)=>{ group.forEach(menu=>{ if(currentUrl.includes(menu.url)){ // ✅ 핵심 수정 foundIndex = i; foundText = menu.name; } }); }); // 2차 생성 renderDepth2(foundIndex); // 1차 버튼 텍스트 변경 const depth1Text = depth1Btns[foundIndex] ?.querySelector('button') ?.childNodes[0].textContent.trim(); if(depth1Text){ depth1Select.querySelector('button').innerHTML = depth1Text + ' '; } // 2차 버튼 텍스트 변경 if(foundText){ depth2Select.querySelector('button').innerHTML = foundText + ' '; } }); // ============================ // 7. 자동 active 처리 (핵심) // ============================ window.addEventListener('DOMContentLoaded', function(){ const currentUrl = window.location.pathname; const depth2Text = document.querySelector('.location .depth_2')?.innerText.trim(); document.querySelectorAll('.depth2 li').forEach(li=>{ const a = li.querySelector('a'); // URL 기준 if(currentUrl.includes(a.getAttribute('href'))){ setActive(li); } // 텍스트 기준 (fallback) if(a.innerText.trim() === depth2Text){ setActive(li); } }); function setActive(targetLi){ // 2차 active targetLi.classList.add('active'); // 1차 active const parentLi = targetLi.closest('.depth1 > li'); parentLi.classList.add('active'); // 모바일 버튼 텍스트 반영 depth1Select.querySelector('button').innerHTML = parentLi.querySelector('button').childNodes[0].textContent.trim() + ' '; depth2Select.querySelector('button').innerHTML = targetLi.innerText + ' '; } }); // ============================ // 8. 외부 클릭 닫기 // ============================ document.addEventListener('click', function(e){ if(!e.target.closest('.select')){ document.querySelectorAll('.select').forEach(el=>{ el.classList.remove('active'); }); } });