jsTree 获取节点的兄弟节点

Jol*_*lan 1 jstree jstree-dnd

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

下面是一个例子:

图像1

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

图像2

获取有关移动节点的数据并更新它在 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)

那么有没有办法获得兄弟姐妹位置的数据?

Ste*_*n S 5

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