我将Fancytree用于我的项目。
https://jsfiddle.net/middle536/spwsvsoz/
source: [
{title: "Folder 1", folder: true, keyid: "id1"},
{title: "Folder 2", folder: true, keyid: "id1,id2"},
{title: "Folder 3", folder: true, keyid: "id1,id3", children: [
{title: "Node 3.1"},
{title: "Node 3.2"}
]},
{title: "Folder 4", folder: true, keyid: "id3"}
],
我有一个数组。见上面的源矩阵。 每个文件夹都有多个keyid。 此示例选择使用#button1的所有keyid = id2。 选择了两个文件夹。 Fancytree将发送选择2次(见警报)。
如果选择3个文件夹或节点。 Fancytree将发送这些选择3次。
这会导致我的代码出现故障。
$(function(){
$("#tree").fancytree({
checkbox: true,
...
source: {source },
extensions: ["edit", "table", "gridnav","childcounter","filter"],
select: function(event, data) {
//Here have a jquery datatable update function.
//When #button1 click function do multi selection
//the jquery datatable will alert error message.
},
table:....
})
$("#button1").click(function(){
var key_ids = new Array();
var nodeList = new Array();
$("#tree").fancytree("getTree").visit(function(node){
if(typeof node.data.keyid != "undefined"){
key_ids = node.data.keyid.split(",");
for (var i = 0; i < key_ids.length; i++) {
if(key_ids[i] == 'id2'){
//node.setSelected(true);//this do multi select multi times
//alert(key_ids);
nodeList.push(node);
}
}
}
});
nodeList.setSelected(true);//this do multi select one time, but can't work.
});
我知道nodeList.setSelected(true);是错误的语法。 这个想法是多节点选择一次。 多节点不是多次选择。 怎么做?
答案 0 :(得分:0)
从your comment here开始,我假设在这种情况下你只需要一个警报。 这与Fancytree无关,因为你正在发送'event'(由'alert()'调用标记。
但是,您可以更改代码以收集所有匹配项,然后立即发送:
var i, key_ids,
nodeList = [];
$("#tree").fancytree("getTree").visit(function(node){
if( node.data.keyid ){
key_ids = node.data.keyid.split(",");
for (i = 0; i < key_ids.length; i++) {
if(key_ids[i] === 'id2'){
node.setSelected(true);
nodeList.push(node);
}
}
}
});
alert($.map(nodeList, function(o){ return o.title; }).join(", "));