看看免费的JSTree http://www.jstree.com/用户控制。它基于 JavaScript,开源,允许配置多种样式的树视图,例如:
由于此处显示的复选框只是图像,因此您可以轻松地将它们替换为单选按钮,并且通过事件处理,您可以禁止多个选择,因此如果需要,它们的行为就像单选按钮一样。
这是通过指定"checkbox"
插件如下(请参阅下面我提供的片段以获取完整的工作代码):
$(function () {
$("#demo1")
.jstree({
"themes": {
"theme": "apple","dots": false,"icons": false
},
"plugins": ["themes", "html_data", "checkbox", "sort", "ui"]
});
});
相应的 HTML 结构如下所示,只需将其包含在页面正文中即可:
<div id="demo1" class="demo" style="height:100px;">
<ul>
<li id="phtml_1"> <a href="#">Root node 1</a>
<ul>
<li id="phtml_2"> <a href="#">Child node 1</a>
</li>
<li id="phtml_3"> <a href="#">Child node 2</a>
</li>
</ul>
</li>
<li id="phtml_4"> <a href="#">Root node 2</a>
</li>
</ul>
</div>
要获取检查的值,请使用此函数(假设您已使用以下命令创建了一个 divid="listForDisplay"
正如我在 JSFiddle 示例中所做的那样):
var $listForDisplay = $("#listForDisplay");
function displayList(data) { // see: https://www.jstree.com/docs/events/
var i, j, r = [];
for (i = 0, j = data.selected.length; i < j; i++) {
r.push(data.instance.get_node(data.selected[i]).text);
}
$listForDisplay.html('Selected: ' + r.join(', '));
}
该代码可以在单击事件中触发,也可以像我一样绑定 JSTree 事件。将以下内容附加到前面的 JavaScript 代码片段即可完成这项工作:
$("#demo1")
.on('loaded.jstree', function (e, data) {
displayList(data);
})
.on('change_state.jstree', function (e, data) {
displayList(data);
});
Note:选择父节点后,父节点名称将与子节点一起列出。如果仅选择子项,则不会列出相关的父项。
您可以找到有关指定此插件行为的选项的更多信息here http://www.jstree.com/documentation/checkbox.
可运行的代码片段(完整代码)
$(function() {
var $demo1 = $("#demo1");
var $listForDisplay = $("#listForDisplay");
function displayList(data) { // see: https://www.jstree.com/docs/events/
var i, j, r = [];
for (i = 0, j = data.selected.length; i < j; i++) {
r.push(data.instance.get_node(data.selected[i]).text);
}
$listForDisplay.html('Selected: ' + r.join(', '));
}
$demo1.jstree({
"themes": {
"theme": "apple",
"dots": false,
"icons": false
},
"plugins": ["themes", "html_data", "checkbox", "sort", "ui"]
});
$demo1.on('loaded.jstree', function(e, data) {
displayList(data);
});
$demo1.on('changed.jstree', function(e, data) {
displayList(data);
});
});
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js"></script>
</head>
<body>
<div id="demo1" class="demo" style="height:100px;">
<ul>
<li id="phtml_1"> <a href="#">Root node 1</a>
<ul>
<li id="phtml_2"> <a href="#">Child node 1</a>
</li>
<li id="phtml_3"> <a href="#">Child node 2</a>
</li>
</ul>
</li>
<li id="phtml_4"> <a href="#">Root node 2</a>
</li>
</ul>
</div>
<br/>
<div id="listForDisplay" />
</body>