3

我想在现有节点内部或之下创建一个节点,具体取决于它是否是根节点。(树小部件通常是树列表或没有可见根节点的树。)

我试过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。

编辑:

我最终检查了父母的父母的已知ID。

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});
}
4

3 回答 3

4

您可以在节点上调用get_parent() 。如果它返回“#”,则该节点是根节点。例如:

var node = ...;

if($('#demo1').jstree(true).get_parent(node) == '#') {
    // node is a root node
}
于 2015-03-23T14:48:20.460 回答
2

这不是理想的解决方案,但您可以在参数中使用_get_childrenwith-1来获取所有根节点并测试您的节点是否在列表中。

._get_children ( node )
  Use -1 to return all root nodes.

(来自http://www.jstree.com/documentation/core

于 2012-04-09T07:39:45.357 回答
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作为本机方法提供。

于 2013-04-16T03:48:28.420 回答