项目需要实现权限管理,使用前端框架bootstrap,所以就直接选用了bootstrap的treeview扩展插件。先上图:
选中父节点时,父节点下所有子节点也都全部选中,看代码
1、HTML代码
<h2>TreeView Checkable</h2> <div id="treeview-checkable"></div>
2、Json数据
function getTvStateData() { var defaultData = [ { text: 'Parent 1', href: '#parent1', tags: ['4'], state: { checked: true }, nodes: [ { text: 'Child 1', href: '#child1', tags: ['2'], nodes: [ { text: 'Grandchild 1', href: '#grandchild1', tags: ['0'] }, { text: 'Grandchild 2', href: '#grandchild2', tags: ['0'] } ] }, { text: 'Child 2', href: '#child2', tags: ['0'] } ] }, { text: 'Parent 2', href: '#parent2', tags: ['0'], nodes: [ { text: 'Child 1', href: '#child1', tags: ['2'], nodes: [ { text: 'Grandchild 1', href: '#grandchild1', tags: ['0'] }, { text: 'Grandchild 2', href: '#grandchild2', tags: ['0'] } ] }, { text: 'Child 2', href: '#child2', tags: ['0'] } ] }, { text: 'Parent 3', href: '#parent3' }, { text: 'Parent 4', href: '#parent4', tags: ['0'] }, { text: 'Parent 5', href: '#parent5', tags: ['0'] } ]; return defaultData; }
3、JS数据绑定,加载TreeView
$(function() { var $checkableTree = $('#treeview-checkable') .treeview({ data: getTvStateData(), //数据 showIcon: false, showCheckbox: true, levels: 1, onNodeChecked: function(event, node) { //选中节点 var selectNodes = getChildNodeIdArr(node); //获取所有子节点 if (selectNodes) { //子节点不为空,则选中所有子节点 $('#treeview-checkable').treeview('checkNode', [selectNodes, { silent: true }]); } var parentNode = $("#treeview-checkable").treeview("getNode", node.parentId); setParentNodeCheck(node); }, onNodeUnchecked: function(event, node) { //取消选中节点 var selectNodes = getChildNodeIdArr(node); //获取所有子节点 if (selectNodes) { //子节点不为空,则取消选中所有子节点 $('#treeview-checkable').treeview('uncheckNode', [selectNodes, { silent: true }]); } }, onNodeExpanded: function(event, data) { if (data.nodes === undefined || data.nodes === null) { } else if (data.tags[0] === "2") { alert("Tags 2"); } else { alert("1111"); } } }); });
4、选中/取消选中父节点时,选中/取消选中所有子节点,以及选中所有子节点时,选中父节点
function getChildNodeIdArr(node) { var ts = []; if (node.nodes) { for (x in node.nodes) { ts.push(node.nodes[x].nodeId); if (node.nodes[x].nodes) { var getNodeDieDai = getChildNodeIdArr(node.nodes[x]); for (j in getNodeDieDai) { ts.push(getNodeDieDai[j]); } } } } else { ts.push(node.nodeId); } return ts; } function setParentNodeCheck(node) { var parentNode = $("#treeview-checkable").treeview("getNode", node.parentId); if (parentNode.nodes) { var checkedCount = 0; for (x in parentNode.nodes) { if (parentNode.nodes[x].state.checked) { checkedCount ++; } else { break; } } if (checkedCount === parentNode.nodes.length) { $("#treeview-checkable").treeview("checkNode", parentNode.nodeId); setParentNodeCheck(parentNode); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
element ui 树状表格选择父节点子节点全选,子节点不全选父节点半选? el-table没有相关示例,需要手动实现好像?![上传中...]()
element ui 树状表格选择父节点子节点全选,子节点不全选父节点半选? el-table没有相关示例,需要手动实现好像?
假设我有一个绑定项目源(可观察集合)的TreeView,我有这样的东西:http://docs.telerik.com/devtools/wpf/controls/radtreeview/how-to/howto-tri-state-mvvm 每个项目包括父视图都有一个复选框和名称(字符串)。 我想让子节点仅在检查父节点时可用。 如果父节点未被选中,所有子节点也将被取消选中。 有没有办法让我做到这
如果我没弄错的话,树通常是一个列表,其中的元素按特定顺序排列。孩子们不在他们自己的子列表中,他们都在同一个列表中。 所以,我试图创建一个Tree类,其中包含TreeNodes(类)使用Tree类中的List。 我如何跟踪父母/孩子/叶子?如果父母“父母1”,有两个孩子“孩子A”和“孩子B”,我如何将他们联系在一起?
我有一个XML文档,它包含一个非常复杂(对我来说)的结构,没有换行符。它有许多具有类似结构的元素: 我需要得到节点值的文本,这是节点成员的孩子也有孩子的名字与特定的文本(在这种情况下virtual_size)。也有可能存在几个类似的节点。我可以用[1]etc吗? 这让我知道了节点的名称,但是如何达到“值”节点呢?
我有一个这样的结构` ...等等,在