我想在现有节点内部或下面创建一个节点,具体取决于它是否是根节点。 (树窗口小部件通常是树的列表或没有可见根节点的树。)
我尝试了get_parent,但我怎么知道这是否是根节点?
var parent = $("#demo1").jstree('_get_parent', $("#foo"));
var node = $("#demo1").jstree('_get_node', $("#foo"));
令我困惑的是get_node似乎返回与get_parent相同的对象。
我正在使用jstree_pre1.0_fix_1。
编辑:
我最终检查了父母父母的已知身份。
var node = $(e.replyto);
if (node.length) {
if (node.parent().parent().attr('id') == 'demo1') {
$("#demo1").jstree("create_node", node, 'last',{'attr': {'id':e.id}, 'state':'open', 'data': e.data}) ;
} else {
$("#demo1").jstree("create_node", node, 'after',{'attr': {'id':e.id}, 'state':'open', 'data': e.data}) ;
}
} else {
$("#demo1").jstree("create_node", -1, 'after',{'attr': {'id':e.id}, 'state':'open', 'data': e.data});
}
答案 0 :(得分:4)
您可以在节点上调用get_parent()。如果它返回'#',则该节点是根节点。 E.G:
var node = ...;
if($('#demo1').jstree(true).get_parent(node) == '#') {
// node is a root node
}
答案 1 :(得分:2)
这不是理想的解决方案,但您可以在参数中使用_get_children
和-1
来获取所有根节点,并测试您的节点是否在列表中。
._get_children ( node )
Use -1 to return all root nodes.
答案 2 :(得分:1)
我一直在苦苦挣扎,因为我试图使用上下文菜单插件。我不希望用户能够创建新的根节点。我只想让他们创建子节点。 (根节点表示当前用户所属的组,因此由管理员预先设置)。我的第一个困惑是_get_children
返回一个具有length
属性的对象。它不是数组,但它具有与实际根节点数正确对应的length
属性。查看底层代码,jstree
_get_children
方法使用jQuery的children
方法,该方法返回索引为0,1,2等的子节点以及其他jQuery属性,方法。我发现仅提取节点数组很方便,并使用indexOf
检查当前节点是否为根节点。所以,这是我的items
上下文菜单配置的jstree
属性的片段:
'items': function(node){
var rootChildren = this._get_children(-1),
rootNodes = [],
i;
//rootChildren is now a fancy jQuery object with the child nodes assigned
//to keys 0, 1 etc.
//Now create a simple array
for(i = 0; i < rootChildren.length; i += 1){
rootNodes[i] = rootChildren[i];
}
//We can now use indexOf to check if the current node is in that array
//Note again that node is a fancy jQuery object, the actual DOM element
//is stored in node[0]
console.log(rootNodes.indexOf(node[0]) > -1);
//code here to add whatever items you want to the context menu.
}
如果右键单击树,您将在控制台窗口中看到根节点的true
和层次结构下面的任何节点的false
。请注意,对于低于8的IE(我认为),您需要为indexOf
提供Array
方法,因为早期版本的IE不提供indexOf
作为本机方法。