[jQuery] jQuery

jQuery 트리를 사용하여 부서별 조직도를 구현합니다. 웹 프로그래밍에서는 트리와 같은 데이터 구조를 표현하는 경우가 많습니다. 첫 번째 HTML에서 트리를 나타내는 요소를 만듭니다.

< ID=“tree_menu”>

  • ……

    >


    트리를 나타내는 요소는 프로젝트에 따라 동적으로 구성됩니다.
    관련 JavaScript를 추가하고 ID가 “tree_menu”인 요소를 초기 상태(열기/닫기)가 있는 트리로 표현합니다.

    jstree.zip
    0.01MB


    ▣ tree.html (utf-8)

    <!doctype html>
    <html lang="ko">
    <head>
    <meta charset="utf-8">
    <title>jQuery Tree menu</title>
    <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
    <script type="text/javascript" src="js/jtree.js"></script>
    <link rel="stylesheet" type="text/css" href="css/jtree.css" />
    </head>
     
    <body>
    <ul id="tree_menu">
            <li>전체</a>
            <ul>
                   <li>부서 1
                   <ul>
                           <li>팀 1-1</li>
                   </ul>
                   </li>
                   <li>부서 2
                   <ul>
                           <li>팀 2-1</li>
                           <li>팀 2-2</li>
                   </ul>
                   </li>
                   <li>부서 3
                   <ul>
                           <li>팀 3-1</li>
                           <li>팀 3-2</li>
                           <li>팀 3-3</li>
                   </ul>
                   <li>부서 4
                   <ul>
                           <li>팀 4-1</li>
                           <li>팀 4-2</li>
                           <li>팀 4-3</li>
                           <li>팀 4-4</li>
                   </ul>
                   </li>
            </ul>
            </li>
    </ul>
    </body>
    </html>

    ▣ jtree.css (utf-8)

    @charset "utf-8";
     
    ul#tree_menu,ul#tree_menu * {
            margin: 0;
            padding: 0;
            list-style: none;
            border: none;
            overflow: hidden;
            text-decoration: none;
            color: #555;
    }
     
    ul#tree_menu a:hover {
            text-decoration: underline;
    }
     
    ul#tree_menu ul {
            padding: 0 0 0 0px;
            zoom: 1;
    }
     
    ul#tree_menu li {
            position: relative;
            background: url(../images/tree_bg.gif) no-repeat 7px top;
            padding: 0 0 0 20px;
            font-size: 13px;
            line-height: 18px;
            zoom: 1;
    }
     
    ul#tree_menu li.end {
            background-image: url(../images/tree_end.gif);
    }
     
    ul#tree_menu li a.control {
            position: absolute;
            left: 0px;
            top: 1px;
            display: block;
            width: 9px;
            height: 9px;
            padding: 3px;
    }

    ▣ jtree.js (utf-8)

    jQuery(function($) {
        var tree_menu = $('#tree_menu');
        var icon_open = 'images/tree_open.gif';
        var icon_close="images/tree_close.gif";
        
        tree_menu.find('li:has("ul")')
          .prepend('<a href="#" class="control"><img src="' + icon_close + '" /></a> ');
        tree_menu.find('li:last-child').addClass('end');
        
        $('.control').click(function() {
            var temp_el = $(this).parent().find('>ul');
            if (temp_el.css('display') == 'none') {
                temp_el.slideDown(100);
                $(this).find('img').attr('src', icon_close);
                return false;
            }
            else {
                temp_el.slideUp(100);
                $(this).find('img').attr('src', icon_open);
                return false;
            }
        });
        
        function tree_init(status) {
            if (status == 'close') {
                tree_menu.find('ul').hide();
                $('a.control').find('img').attr('src', icon_open);
            }
            else if (status == 'open') {
                tree_menu.find('ul').show();
                $('a.control').find('img').attr('src', icon_close);
            }
        }
        
        // tree_init('close');
        tree_init('open');
    });

    ▣ 결과 화면