如何读取具有部分选定子节点的父节点
我在我的代码中使用dynaTree http://wwwendt.de/tech/dynatree/index.html来显示一个2级树。 此树在selectMode = 3
显示,带有checkboxes
,当用户选中一个节点复选框时,其父级将变为gray mode
。
在用户单击按钮的下一阶段,我将所有选定的节点发送到服务器进行处理。 我想要做的是发送所有gray mode
复选框。
我怎样才能实现这个目标?
编辑:这是您需要的所有代码
var treeData = [ { key: "key1", title: "Text 1" }, { key: "Key2", title: "Text 2", children: [ { key: "Key2_1", title: "Text 2_1" }, { key: "Key2_2", title: "Text 2_2" }, ] }, ]; $(function () { $("#tree").dynatree({ checkbox: true, selectMode: 3, children: treeData, imagePath: "../images/Tree/", onSelect: function (select, node) { var selKeys = $.map(node.tree.getSelectedNodes(), function (node) { return node.data.key; }); $('#textField').val(selKeys.join(", ")); } }); });
当选择Key2_1
, Key2
进入gray state
,你会看到Key2_1
被添加到textField
文本框中,我想在textField
字段中也有Key2。
注意:选择Key2_1
和Key2_2
两个子节点也将选择父节点(key_2),但是当它处于gray mode
似乎dynaTree没有找到部分选定节点的方法。 另一种解决方案是查找此类节点的类名。 默认情况下,如果未更改部分选定节点的类名,则它将是dynatree-partsel
,但是具有完全选定子节点的节点也分配了该类,因此我们需要dynatree-selected
在其类中没有选择dynatree-selected
节点。
一个肮脏的解决方案将onSelect方法定义更改为:
onSelect: function (select, node) { var selKeys = $.map(node.tree.getSelectedNodes(), function (node) { return node.data.key; }); var partsel = new Array(); $(".dynatree-partsel:not(.dynatree-selected)").each(function () { var node = $.ui.dynatree.getNode(this); partsel.push(node.data.key); }); selKeys = selKeys.concat(partsel); $('#textField').val(selKeys.join(", ")); }
var parent = node.getParent(); var parentnode = parent.data.key;
在parentnode
变量中,您将获得父节点的值