动态树-选中节点时,禁用(或隐藏)子节点中的复选框
Dynatree - disable (or hide) the checkboxes from the children nodes when a node is selected
我使用dynatree
在目录层次结构中选择多个节点。
因此,我研究了selectMode
的所有内置选项的行为,但不幸的是,它们都不能解决我的问题:
- 1:单选(不是我的情况(
- 2:多选
- 当选择了所有子节点时,它不会选择父节点(ok(
- 选择父节点时,它不会选择所有子节点(不正常(
- 3:分层多选
- 当选择了所有子节点时,它会选择父节点(不正常(
- 选择父节点时,它会选择所有子节点(ok(
如果
- 当选择了所有子节点时,它不会选择父节点
- 选择所有子目录不同于选择它们的父目录
- 选择父节点时,它会选择所有子节点
- 否则,用户可能无法理解是否也选择了子项
问题1:如何实现这种行为?
此外,dtnode.tree.getSelectedNodes()
正在返回冗余节点:
/Foo
/Foo/Bar
如果选择了/Foo
,对我来说,这已经意味着/Foo/Bar
被选择了
问题2:如何优化所选节点的冗余度?
我看到的最佳解决方案包括使用selectMode: 2
并在选择节点时切换子复选框的可见性:
//enable or disable redundant children nodes recursively
function toggleChildrenNodes(disableChildren, dtnode) {
if (!dtnode)
return;
if (!dtnode.childList)
return;
for (var chIdx = 0; chIdx < dtnode.childList.length; chIdx++) {
dtnode.childList[chIdx].data.hideCheckbox = disableChildren;
dtnode.childList[chIdx].render(true);
//when re-enabling a child node that was previously selected, it should disable their children
toggleChildrenNodes(disableChildren || dtnode.childList[chIdx].isSelected(), dtnode.childList[chIdx]);
}
}
$('#myTree').dynatree({
selectMode: 2,
checkbox: true,
onSelect: function(isSelected, dtnode) {
if(!dtnode)
return;
toggleChildrenNodes(isSelect, dtnode);
//gets the optimized selected nodes
var dryNodes = $.map(dtnode.tree.getSelectedNodes(), function(currentSelectedNode, idx) {
if (!currentSelectedNode.data.hideCheckbox) { //skip redundant nodes
return currentSelectedNode.data.key;
}
return null;
});
console.log(dryNodes);
}
});
此外,如果树节点扩展是惰性的,则有必要处理新的子节点以保持一致性:
onLazyRead: function(dtnode) {
if(!dtnode)
return;
//[...] business logic
//[...] possible iteration to add N children
dtnode.addChild({
//[...] other properties
//creates childnode with the checkbox hidden if the parent is selected or hidden due to a higher ancestor
hideCheckbox: dtnode.isSelected() || dtnode.data.hideCheckbox
});
}
相关文章:
- 选择<李>使用普通JavaScript的子节点,而不是孙节点
- js循环遍历单击的元素子节点
- 如何将数据添加到json的子节点
- 删除HTML节点而不删除其子节点
- 如何在javascript DOM api中获取具有给定条件的子节点
- 仅使用某些子节点访问xml中父节点的子节点
- 检测单击子节点并发送槽事件处理程序
- 从 d3.js 中的树中选择节点的子节点
- 访问所选剑道树视图节点的子节点
- 为什么正文标记后的脚本标记在子节点中计数
- 难以获取使用属性选择的节点的子节点
- 使用Javascript设置带有子节点的父节点的类's文本等于.
- 如何确定父节点是否有子节点
- 在没有 jquery 的情况下更改子节点(父节点具有 ID)中的链接文本
- Javascript - 子节点计数
- Javascript隐藏对象元素数据值的子节点
- 使用 jQuery 显示/隐藏子节点
- 如何正确检查第一子节点是否隐藏并设置函数Bool
- 如果在Angular中所有子节点都被隐藏,那么就隐藏容器
- 动态树-选中节点时,禁用(或隐藏)子节点中的复选框