jsTree获取节点的同级

时间:2018-06-25 09:10:03

标签: jstree jstree-dnd

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

这里是一个示例:

img1

如果我将New node拖到节点Gamme 1中,那么它的兄弟姐妹是gamme 501gamme 500

img2

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

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

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

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

那么有什么方法可以获取有关同胞位置的数据吗?

1 个答案:

答案 0 :(得分:4)

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