场景如下:我有两个jstree,第一个树包含我需要将其中一些移动到第二个jstree的节点。 到目前为止,我已设法移动他们,但没有规则。但我需要做的是: 1.只让一个节点成为整棵树的根 2.检查树中是否已存在不允许移动的节点, 但我无法弄清楚如何做到这一点。 这是第二棵树的代码(移动到的那个):
$('#SecondTree').jstree({
"json_data": {
"data": data
},
"themes": {
"theme": "default",
"dots": false,
"icons": false
},
"dnd": {
},
"crrm": {
"move": {
"always_copy": "multitree"
}
},
"plugins": ["json_data", "themes", "ui", "dnd", "crrm"]
}).bind("move_node.jstree", function (e, data) {
if (data.rslt.r.attr("id") == data.rslt.o.attr("id")) {
return false;
}
});
}
先谢谢你
答案 0 :(得分:1)
不确定我是否理解了你的整个问题,但是,特别是,我可以帮助你解决这个问题:
“[...]检查树中是否已存在不允许移动的节点”
您必须使用crrm plugin,正如您已经尝试过的那样。我刚刚回答了一个pretty similar question,举个例子,也许你也想看看它。
在您的情况下,由于您需要在另一个树中检查节点是否存在,您可以执行以下操作:
"crrm": {
"move": {
"check_move": function(m) {
return (m.ot === m.rt) || !m.rt.get_container().find("li[id="+m.o[0].id+"]").length;
}
}
}
首先,我们检查是否在同一个树内移动节点,并始终允许这种情况(重新排序节点或其他)。如果你不需要,可以改变它。
然后我们检查节点是否存在:
m.o
是要移动的节点。您将在放置节点的树中寻找它。
m.rt.get_container()
将返回一个jQuery DOM结构,所以我们只需要使用.find()
,它将返回一个由ID找到的<li>
元素数组,如果没有,则为空找到。
如果我们返回TRUE(我们在同一个树中移动,或者数组为空,即在第二个树中找不到节点),则允许移动,否则不允许移动。
我希望它有所帮助!