https://plugins.jquery.com/fancytree/
<script src="~/Scripts/lib/jquery.js"></script><script src="~/Scripts/lib/jquery-ui.custom.js"></script>
<link href="~/Scripts/src/skin-win7/ui.fancytree.css" rel="stylesheet" />
<script src="~/Scripts/src/jquery.fancytree.js"></script>
<script type="text/javascript">
var treeData = [
//{title: "item1 with key and tooltip", tooltip: "Look, a tool tip!" },
//{title: "item2: selected on init", selected: true },
{title: "Folder", folder: true, key: "id3",
children: [
{title: "Sub-item 3.1", key: "3.1",
children: [
{title: "Sub-item 3.1.1", key: "id3.1.1" },
{title: "Sub-item 3.1.2", key: "id3.1.2" }
]
},
{title: "Sub-item 3.2", key: "3.2",
children: [
{title: "Sub-item 3.2.1", key: "id3.2.1" },
{title: "Sub-item 3.2.2", key: "id3.2.2" }
]
}
]
},
{title: "Document with some children (expanded on init)", key: "id4", expanded: true,
children: [
{title: "Sub-item 4.1 (active on init)",key: "4.1", active: true,
children: [
{title: "Sub-item 4.1.1", key: "id4.1.1" },
{title: "Sub-item 4.1.2", key: "id4.1.2" }
]
},
{title: "Sub-item 4.2 (selected on init)" ,key: "4.2", selected: true,
children: [
{title: "Sub-item 4.2.1", key: "id4.2.1" },
{title: "Sub-item 4.2.2", key: "id4.2.2" }
]
},
{title: "Sub-item 4.3 (hideCheckbox)" ,key: "4.3", hideCheckbox: true },
{ title: "Sub-item 4.4 (unselectable)", key: "4.4", unselectable: true }
]
},
{title: "Lazy folder", folder: true, lazy: true }
];
$(function(){
$("#tree2").fancytree({
// extensions: ["select"],
checkbox: true,
selectMode: 2,
source: treeData,
//init: function (event, data) {
// //// Set key from first part of title (just for this demo output)
// //data.tree.visit(function (n) {
// // //n.key = n.title.split(" ")[0];
// // n.expanded = true;
// //});
//},
//lazyLoad: function (event, ctx) {
// ctx.result = { url: "ajax-sub2.json", debugDelay: 1000 };
//},
//loadChildren: function (event, ctx) {
// ctx.node.fixSelection3AfterClick();
//},
select: function(event, data) {
// Display list of selected nodes
var selNodes = data.tree.getSelectedNodes();
// convert to title/key array
var selKeys = $.map(selNodes, function(node){
return "[" + node.key + "]: '" + node.title + "'";
});
$("#echoSelection2").text(selKeys.join(", "));
},
click: function(event, data) {
// We should not toggle, if target was "checkbox", because this
// would result in double-toggle (i.e. no toggle)
//
alert(data.node.key);
alert(data.node.title);
},
keydown: function(event, data) {
if( event.which === 32 ) {
data.node.toggleSelected();
return false;
}
},
// The following options are only required, if we have more than one tree on one page:
cookieId: "fancytree-Cb2",
idPrefix: "fancytree-Cb2-"
});
$("#btnToggleSelect").click(function () {
$("#tree2").fancytree("getRootNode").visit(function (node) {
node.toggleSelected();
});
return false;
});
$("#btnDeselectAll").click(function () {
$("#tree2").fancytree("getTree").visit(function (node) {
node.setSelected(false);
});
return false;
});
$("#btnSelectAll").click(function () {
$("#tree2").fancytree("getTree").visit(function (node) {
node.setSelected(true);
});
return false;
});
});
</script>
<!-- Tree #2 -->
<p>
<a href="#" id="btnSelectAll">Select all</a> -
<a href="#" id="btnDeselectAll">Deselect all</a> -
<a href="#" id="btnToggleSelect">Toggle select</a>
</p>
<div id="tree2"></div>
<div>Selected keys: <span id="echoSelection2">-</span></div>