아코디언 많은 뎁스

조회수 625회

아코디언 뎁스를 만들던 중 실행이 자꾸 안 돼서 질문 올립니다.

<html>
<div class="accordion">
                <div class="accordion_wrap">
                    <h2>패션의류/언더웨어</h2>
                    <dl class="accordion_container">
                        <dt><a href="javascript:void(0)" class="accordion_toggle">여성의류</a></dt>
                        <dd class="accordion_content">
                            <ul class="total">
                                <li>전체</li>
                            </ul>
                            <a href="javascript:void(0)" class="inner_toggle">아우터</a>
                            <ul class="product">
                                <li><a href="javascript:void(0)">자켓</a></li>
                                <li><a href="javascript:void(0)">캐시미어</a></li>
                                <li><a href="javascript:void(0)">코트</a></li>
                                <li><a href="javascript:void(0)">가디건</a></li>
                                <li><a href="javascript:void(0)">점퍼</a></li>
                                <li><a href="javascript:void(0)">3depth 타이틀</a></li>
                                <li><a href="javascript:void(0)">3depth 타이틀</a></li>
                                <li><a href="javascript:void(0)">3depth 타이틀</a></li>
                            </ul>
                        </dd>
                        <dd class="accordion_content">
                            <a href="javascript:void(0)" class="inner_toggle">2depth 타이틀</a>
                            <ul class="product">
                                <li><a href="javascript:void(0)">자켓</a></li>
                            </ul>
                        </dd>
                        <dd class="accordion_content">
                            <a href="javascript:void(0)" class="inner_toggle">2depth 타이틀</a>
                            <ul class="product">
                                <li><a href="javascript:void(0)">자켓</a></li>
                            </ul>
                        </dd>
                    </dl>
                </div>
    </html>
    <script>
    $('.accordion_wrap .depth1_tit').on('click', function (e) {
        console.log('test');
        e.preventDefault();

        $('.accordion_wrap .depth1_tit, .accordion_wrap .depth2_tit').removeClass('category_on');
        $('.accordion_wrap .depth2_wrap, .accordion_wrap .depth3_wrap').stop().slideUp();
        if (!$(this).next('.depth2_wrap').is(':visible')) {
            $(this).addClass('category_on');
            $(this).next('.depth2_wrap').stop().slideDown();
        }
    });

    $('.accordion_wrap .depth2_tit').on('click', function (e) {
        console.log('test');
        e.preventDefault();

        $('.accordion_wrap .depth2_tit').removeClass('category_on');
        $('.accordion_wrap .depth3_wrap').stop().slideUp();
        if (!$(this).next('.depth3_wrap').is(':visible')) {
            $(this).addClass('category_on');
            $(this).next('.depth3_wrap').stop().slideDown();
        }
    });`
`</script>
  • 주어진 코드가 좀 이상한데요. 맨 끝에는 ` 부호가 오타처럼 붙어있고 HTML에는 아무리 봐도 .depth2_tit 클래스를 가진 요소가 없고... 정말 코드가 딱 이것까지만이라면 이건 솔직히 작동을 하는 게 더 이상한 코드입니다. 엽토군 2019.12.27 19:14

1 답변

  • 아무래도 웹사이트 좌측메뉴라는 매우 흔한 컴포넌트를 만들고 계신 것 같은데... 권장하기 힘든 코딩 패턴이 너무 많아서 오히려 그쪽으로 감히 한 말씀 보태고자 합니다.

    • dl, dt, dd어떤 용어와 그 정의를 위해 사용하는 목록 태그이므로, 메뉴와 같이 일반적인 목록에 사용하시면 (스크린 리더, 검색엔진 로봇 등등이 여기에 아주 특별한 의미를 부여해 버리기 때문에) 좋지 않습니다. 그냥 ul/ol, li를 사용하는 것을 권장합니다.
    • .removeClass().stop().slideUp()이 한꺼번에 사용되는 이유를 모르겠습니다. 엄밀히 말하면, 둘은 서로 다른 접근법을 취하는 것입니다. 가급적 둘 중 한 가지 접근으로만 처리하시기를 권장합니다.
    • is(':visible')은 JS가 계산을 하는 데 시간이 걸리고, 예외 케이스가 발생하기 아주 좋으며, 브라우저/jQuery 버전을 탈 우려가 있는 방식입니다. 이보다 더 근본적인 접근법을 찾으시는 것이 좋습니다.

    남들이 만들어놓은 좋은 사례들이 많습니다. 참고해 보세요.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)