如何读取具有部分选定子节点的父节点

我在我的代码中使用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_1Key2进入gray state ,你会看到Key2_1被添加到textField文本框中,我想在textField字段中也有Key2。

注意:选择Key2_1Key2_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变量中,您将获得父节点的值