2016年1月26日火曜日

【HTML5】 CSS と JQuery を使って、Treeview を作成する

ツリービューは、いろいろ便利ですよね。
下の参考URLにあるツリービューを試してみました。

ポイントは、
・リスト(ul/li)を使って、ツリーを作成する
・要素クリックイベントを定義して、子要素表示非表示を制御する
 選択した子要素はクラスを定義し直して、CSSで定義した装飾を行う
・クリックイベントは、javaScriptを使って、clickイベントを定義する
 javaScript内では、jQueryを仕様する($(document)などの$の使い方は、jQueryを勉強して覚える)
・要素の装飾はCSSファイルで定義する

1、HTML
1) <head>にjqueryと、作成するJavaScriptファイルを定義する
2)  <head>に使用するcssファイルを定義する
3) <body> にツリービューのリストを記載する
 TreeContainerが親要素、tree以下が子要素(ツリー)となります。
 ツリーはリスト(ul,li)で作成します。

<head>
  <script src="jquery-1.10.2.min.js"></script>
  <script src="treeview.js"></script>
 <link href="Style.css" rel="stylesheet" />
</head>

 <body>
    <div class="TreeContainer" >
        <div class="ParentPlace">
            <span>藤沢小学校</span>
        </div>
        <br><br>
        <ul class="tree">
            <li>
                <span>1</span>
                <img src="Images/ChildNode.png" />
                <a> 1年 </a>
                <ul>
                    <li>
                        <span>3</span>
                        <img src="Images/ChildNode.png" />
                        <a>A組</a>
                        <ul>
                            <li><a>鈴木先生</a></li>
                            <li>
                                <span>3</span>
                                <img src="Images/ChildNode.png" />
                                <a>Hydarbad</a>
                                <ul>
                                    <li><a>生徒:青木</a></li>
                                    <li><a>生徒:浅野</a></li>
                                    <li><a>生徒:高橋</a></li>
                                </ul>
                            </li>
                        </ul>
                    </li>
                </ul>
            </li>
            <li>
                <span>3</span>
                <img src="Images/ChildNode.png" />
                <a>2年</a>
                <ul>
                    <li><a>A組</a></li>
                    <li><a>B組</a></li>
                    <li>
                        <span>3</span>
                        <img src="Images/ChildNode.png" />
                        <a>佐藤先生</a>
                        <ul>
                            <li><a>江口</a></li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </div>

</body>

下図がブラウザに表示された絵となります。

2、JavaScriptコード
 treeview.jsにJavaScriptのコードを記載する
(1) LoadChildrenで、子要素表示非表示を制御します
(2) NodeSelectionで、クラスの定義し直しします(removeClass/addClass)
(3) $(document).readyで、で「HTML=DOMの読み込みが終わったらfunction()の中の処理(=なにかしらの処理)を実行」します。
  コードは、画像クリックしたら、 LoadChildrenを実行し、treeのliをクリックしたらremoveClassで、 CSSクラスを削除し、addClassで"selected"クラスを定義し直します
 ※クラスを定義し直して、CSSで定義したスタイルを使って装飾しなおします。
 

    function LoadChildren(ctrl) {
        if ($(ctrl).next('a').next('ul').is(':visible')) {
            $(ctrl).next('a').next('ul').hide('slow');
            $(ctrl).attr('src', '/Images/ChildNode.png');
        }
        else {
            $(ctrl).next('a').next('ul').show('slow');
            $(ctrl).attr('src', 'Images/ChildNode.png');
        }
    }       

    function NodeSelection(ctrl) {
        $('ul.tree li').find('a').each(function () { $(this).removeClass(); })
        $(ctrl).addClass("selected");
    }

    $(document).ready(function () {
        $('ul.tree li').each(function () {
            $(this).children('img').click(function () {
                LoadChildren(this);
            });
        });

        $('ul.tree li a').click(function (e) {
            $('ul.tree li').find('a').each(function () { $(this).removeClass(); })

            $(this).addClass("selected");
        });
    });



3、CSS定義
Style.cssを作成します。
ファイル内では、クラス(TreeContainerなど)の装飾定義をします。
 要素を選択した時の”selected”要素も定義します。

.TreeContainer {
    border: solid 0px red;
    width: 350px;
    height: 400px;
    overflow-y: auto;
    padding: 10px;
}
.TreeContainer .ParentPlace {
        border: solid 0px silver;
        padding: 5px;
        font-size: 10pt;
        font-family: 'Segoe UI';
        width:auto;
 }
TreeContainer .ParentPlace span {
            float:left;
            border:dashed 2px silver;
            padding:5px;
            border-top-right-radius:20px;
            border-bottom-right-radius:20px;
 }
.TreeContainer .MyPlace {
        border: solid 0px silver;
        padding: 5px;
        font-size: 10pt;
        font-family: 'Segoe UI';
        width:auto;
}
.TreeContainer .MyPlace span {
            float:left;
            border:dashed 2px silver;
            padding:5px;
            border-top-right-radius:20px;
            border-bottom-right-radius:20px;
 }

TreeContainer ul.tree,
ul.tree ul {
        list-style-type: none;
        background: url(Images/vline.png) repeat-y;
        margin: 0;
        padding: 0;
        cursor: pointer;
        border: solid 0px black;
        -webkit-touch-callout: none;
        -webkit-user-select: none;
        -khtml-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
        margin-left:5px;
        margin-top:0px;
 }

TreeContainer ul.tree ul {
            margin-left: 10px;
            cursor: pointer;
            -webkit-touch-callout: none;
            -webkit-user-select: none;
            -khtml-user-select: none;
            -moz-user-select: none;
            -ms-user-select: none;
            user-select: none;
 }

.TreeContainer ul.tree li {
            margin: 0;
            padding: 0 12px;
            line-height: 20px;
            background: url(Images/node.png) no-repeat;
            cursor: pointer;
            -webkit-touch-callout: none;
            -webkit-user-select: none;
            -khtml-user-select: none;
            -moz-user-select: none;
            -ms-user-select: none;
            user-select: none;
}

.TreeContainer ul.tree li span {
                background-color: green;
                padding: 2px 6px;
                border-radius: 10px;
                color: white;
 }
TreeContainer ul.tree li a {
                /*background-color: green;
                padding: 2px 6px;
                border-radius: 10px;
                color: white;*/
}
 .selected {
                background-color: green;
                padding: 2px 6px;
                border-radius: 10px;
                color: white;
 }
selected:hover {
              color:yellow;
 }
           
           
.TreeContainer ul.tree li.last {
                background: url(Images/lastnode.png) no-repeat;
                cursor: pointer;
                -webkit-touch-callout: none;
                -webkit-user-select: none;
                -khtml-user-select: none;
                -moz-user-select: none;
                -ms-user-select: none;
                user-select: none;
 }

.TreeContainer ul.tree li:last-child {
                background: #fff url(Images/lastnode.png) no-repeat;
                cursor: pointer;
                -webkit-touch-callout: none;
                -webkit-user-select: none;
                -khtml-user-select: none;
                -moz-user-select: none;
                -ms-user-select: none;
                user-select: none;
  }

 .TreeContainer ul.tree div:hover {
            text-decoration: underline;
 }

※Images/ChildNode.pngは、参考URLにあるファイル一式ダウンロードすると入っています。

【参考URL】
http://www.codeproject.com/Tips/1073289/Treeview-in-HTML-using-CSS-and-JQuery

0 件のコメント:

コメントを投稿