jQueryプラグインのDynatreeを使ってツリー表示

受託開発担当のRyuです。

今回はjQueryプラグインの一つであるDynatreeの使い方を紹介します。


DynatreeはjQueryでブラウザに簡単にツリーを表示させることができるプラグインです。
jQueryプラグインの中には多くのツリー表示プラグインがありますが、ドキュメントやサンプル、機能の豊富さで今回はDynatreeを選びました。

Dynatreeを動作させるにはjQuery、jQuery-uiを別に読み込む必要があります。

<html><head>
<meta charset="utf-8">
<link href="css/skin-vista/ui.dynatree.css" rel="stylesheet" type="text/css" id="skinSheet">
<style type="text/css">
<!--body {width: 400px;}-->
</style>
</head>
<body>
	<h5>Dynatreeのサンプルです。</h5>

	<div id="tree">
		<ul id="treeData" style="display: none;">
			<li id="id1" title="ファイル">ファイル
			<li id="id2" class="folder">フォルダ
				<ul>
					<li id="id2.1">ファイル
					<ul>
						<li id="id2.1.1">子ファイル1
						<li id="id2.1.2">子ファイル2
					</ul>
				</ul>
			</li>
		</ul>
	</div>

	<script type="text/javascript" src="js/jquery-2.0.0.min.js"></script>
	<script type="text/javascript" src="js/jquery-ui-1.10.2.custom.min.js"></script>
	<script type="text/javascript" src="js/jquery.dynatree.min.js"></script>

	<script>
		var tree = $("#tree").dynatree();
	</script>
</body></html>

ブラウザでツリー表示

Dynatreeは対象となるリストを持つdivセレクタにdynatree()を実行することで利用できます。
htmlではulタグとliタグを使ってツリー構造を表現します。
クラスに「folder」と指定するとアイコンがフォルダへと変更されます。
またフォルダでなくとも子を持つことが可能です。

次は初期化パラメータを指定して、アイコンを変更してみます。

<html><head>
<meta charset="utf-8">
<link href="css/skin-vista/ui.dynatree.css" rel="stylesheet" type="text/css" id="skinSheet">
<style type="text/css">
<!--body {width: 400px;}-->
</style>
</head>
<body>
	<h5>Dynatreeのアイコン設定サンプルです。</h5>

	<div id="tree"></div>

	<script type="text/javascript" src="js/jquery-2.0.0.min.js"></script>
	<script type="text/javascript" src="js/jquery-ui-1.10.2.custom.min.js"></script>
	<script type="text/javascript" src="js/jquery.dynatree.min.js"></script>

	<script>
		var tree = $("#tree").dynatree({
			// imagePath カスタムアイコン画像を保存するフォルダを指定します。デフォルトではui.dynatree.cssと同じフォルダとなっています。
			imagePath: "img/",
			// children ここでツリーのノードを初期化することができます。
			children: [
				// title 表示名を指定します。
				{title: "ファイル1"},
				// isFolder フォルダかどうか指定します。
				// icon アイコンを指定します。
				{title: "フォルダ", isFolder: true, icon: "folder_close.gif",
					children: [
						{title: "子ファイル1"},
						{title: "子ファイル2"}
					]
				},
				{title: "ファイル2",
					children: [
						{title: "子ファイル3"},
						{title: "子ファイル4"}
					]
				}
			],
			// persist フォルダの展開状態をクッキーに保存するか指定します。
			// 有効にするにはjquery.cookie.jsを追加で読み込む必要があります。デフォルトではfalseです。
			persist: false,
			// clickFolderMode フォルダクリック時の挙動を指定します。 1:アクティブ, 2:展開, 3:アクティブ+展開  デフォルトは3です。
			clickFolderMode: 2,
			// checkbox チェックボックスの表示非表示を指定します。
			checkbox: true,
			// selectMode チェックボックスの選択形式を指定します。 1:単一, 2:複数, 3:複数で親選択時、子も全選択される
			selectMode: 2,
			// fx ノードの展開エフェクトを指定します。
			fx: { height: "toggle", duration: 200 },
			// noLink フォルダをアクティブ化できるか指定します。 デフォルトはfalseです。
			noLink: false,
			// debugLevel デバッグレベルを指定します。 0:quiet, 1:normal, 2:debug
			// デフォルトは1ですが、初期化時にコンソールに情報が出力されるので気になる場合は0を指定します。
			debugLevel: 0,
			// ノード展開時発生するイベントです。
			// flag 展開状態
			// node 展開されたノード
			onExpand: function(flag, node) {
				// 展開されたノードがフォルダか判断します。
				if (!node.data.isFolder) {
					return;
				}

				// ノードの状態を判断してアイコンを設定します。
				if (flag) {
					node.data.icon = "folder_open.gif";
				} else {
					node.data.icon = "folder_close.gif";
				}

				// ノードを再描画します。
				node.render();
			},
		});
	</script>
</body></html>

フォルダアイコンを変更

DynatreeのAPIはこちらに纏められています。