jsTree 获取节点的兄弟节点

jsTree get siblings of a node

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

这是一个例子:

如果我将 New node 拖入节点 Gamme 1,现在它的兄弟节点是 gamme 501gamme 500

获取有关移动节点的数据并更新它在数据库中的位置不是问题:

.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
        }
    });
})    

但是我不知道如何获取有关已移动节点的新兄弟节点的信息。

当我做这样的事情时,不幸的是我没有得到关于位置的数据,因为 json jsTree 接受没有位置属性:

$('#tree').jstree(true).get_json(data.node.parent, {flat: true})

那么有什么方法可以获取有关兄弟姐妹位置的数据吗?

您可以在 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);
});