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

时间:2013-11-04 18:30:29

标签: javascript jquery jstree

我将我的工作示例复制到了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没有。 有没有办法让所有已删除节点的父母?

由于

1 个答案:

答案 0 :(得分:0)

关于你的jsfiddle:

  

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

     

错误:TypeError:   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错误:TypeError:parent.find不是   功能源文件: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()是一个函数,父ISNOT)