0

我将我的工作示例复制到 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.parentand not data.rslt.obj。我不data.rslt.object.parent知道何时选择了多个要删除的节点。有没有办法让所有已删除节点的父节点?

谢谢

4

1 回答 1

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)

于 2013-11-04T18:39:48.060 回答