我在 jsTree 中使用拖放,当我将一个节点拖到一个新位置时,我不仅要更新它的位置,还要更新它在数据库中的兄弟节点的位置。
下面是一个例子:

如果我拖入New nodenode Gamme 1,现在它的兄弟姐妹是gamme 501和gamme 500

获取有关移动节点的数据并更新它在 db 中的位置不是问题:
.on("move_node.jstree", function (e, data) {
console.log(data);
$.ajax({
type: "POST",
url: Routing.generate('saveGammeNewPosition'),
data: {
gammeId: data.node.id,
newParentId: data.node.parent,
position: data.position
}
});
})
Run Code Online (Sandbox Code Playgroud)
但我不知道如何获取有关已移动节点的新兄弟节点的信息。
当我做这样的事情时,不幸的是我没有得到位置数据,因为 json jsTree 接受没有位置属性:
$('#tree').jstree(true).get_json(data.node.parent, {flat: true})
Run Code Online (Sandbox Code Playgroud)
那么有没有办法获得兄弟姐妹位置的数据?
您可以在 move_node 事件中获取节点的新父节点,并使用它来获取其直接子节点。
function getSiblings(nodeID, parent) {
var tree = $('#tree').jstree(true),
parentNode = tree.get_node(parent),
aChildren = parentNode.children,
aSiblings = [];
aChildren.forEach(function(c){
if(c !== nodeID) aSiblings.push(c);
});
return aSiblings;
}
$('#tree').on("move_node.jstree", function (e, data) {
var aSiblings = getSiblings(data.node.id, data.parent);
console.log(aSiblings);
});
Run Code Online (Sandbox Code Playgroud)