如何使用 jstree 获取每个已删除节点的父节点

How to get parents of each removed node using jstree?

本文关键字:删除 节点 父节点 何使用 jstree 获取      更新时间:2023-09-26

我将我的工作示例复制到 jsfiddle http://jsfiddle.net/vvMaG/56/

<html>
<script type="text/javascript" src="../_lib/jquery.js"></script>
<script type="text/javascript" src="../_lib/jquery.hotkeys.js"></script>
<script type="text/javascript" src="../jquery.jstree.js"></script>
<div id="menu">
<input type="button" id="remove" value="remove" style="display:block; float:left;"/>
</div><br><br>
<div id="tree">
<ul>
    <li><a>List item one</a></li>
    <li><a>List item two with subitems:</a>
    <ul>
        <li><a>Subitem 1</a></li>
        <li><a>Subitem 2</a></li>
    </ul>
    </li>
    <li><a>Final list item</a>
    <ul>
        <li><a>Subitem 1</a></li>
        <li><a>Subitem 2</a></li>
    </ul>
    </li>
</ul>
</div>
<script type="text/javascript">
    $(function(){
            $("#tree")
                .jstree({
                    "plugins":["html_data","ui","themes","crrm"],
                    "themes" :{
                        "theme":"classic"
                    }
                })
                .bind("select_node.jstree", function (e, data) {
                    /*point 1 here*/
                    var parent=data.inst._get_parent(data.rslt.obj);
                    console.log(parent.find('a').first().text());
                })
                .bind("remove.jstree", function (e, data){
                    /*point 2 here*/
                    var parent=data.inst._get_parent(data.rslt.obj);
                    alert(parent.find('a').first().text());
                    /*point 3 here*/
                    data.rslt.obj.each(function () {
                        console.log(data.rslt.parent.children()[1].text);
                    });
                })
    });
    $(function () { 
        $("#menu input").click(function (){
            $("#tree").jstree(this.id);
        })
    });
</script>
</html>

当我选择一个节点时,它会正确获取父节点(第 1 点)。但是,我怀疑当节点被删除时,此方法不起作用,因为已删除的节点没有父节点(第 2 点),因为我收到parent.find is not a function错误。

我知道如何获得父级的唯一方法是循环data.rslt.parent.children()(第 3 点)。然而,显然这只会得到第一个父母,因为我正在经历rlst.parent而不是data.rslt.obj。当我选择要删除的多个节点时,我不知道有这样的data.rslt.object.parent。有没有办法获取已删除节点的所有父节点?

谢谢

关于你的 jsfiddle :

不工作原因:时间戳:11/4/2013 1:32:36 PM

错误: 类型错误: this.data.html_data.original_container_html.find(...).addBack 不是 函数源文件: raw.github.com/vakata/jstree/v.pre1.0/jquery.jstree.js 行:4018

更改您的 jQuery 库版本。请参阅:jsfiddle.net/vvMaG/52

关于您的另一部分,如果没有元素的父级,它将生成错误。

时间戳:11/4/2013 1:42:03 PM 错误:类型错误:父级查找不是 函数源文件:http://fiddle.jshell.net/vvMaG/54/show/行:45

在您的函数中,

...
.bind("remove.jstree", function (e, data){
                    var parent=data.inst._get_parent(data.rslt.obj);
                    alert(parent.find('a').first().text());
                    data.rslt.obj.each(function () {
                        console.log(data.rslt.parent.children()[1].text);
                    });
                })
...
尝试: parent().find('a') ( parent

) IS a function, parent isnot)