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