【问题标题】:How do I programmatically select a node in jsTree and open all parents如何以编程方式在 jsTree 中选择一个节点并打开所有父节点
【发布时间】:2012-08-17 22:04:44
【问题描述】:

在多级 jsTree 中,如何选择特定节点(可能是叶节点)并展开它的所有父节点? 示例:
从这个 JSFiddle (http://jsfiddle.net/mmeah/fyDE6/) 我想以编程方式选择 Grand Child 并打开所有父节点。

在某些情况下,如果用户通过深层链接进入我的网站,我会尝试确保用户返回到树中的正确节点

【问题讨论】:

  • 我们可以在 jsfiddle 中有一个示例树吗?这是一个起点:jsfiddle.net/mmeah/fyDE6
  • 好主意,我已经通过澄清和您的 JSFiddle 更新了问题

标签: javascript jquery jquery-ui jstree


【解决方案1】:

jsTree 提供了一个 open_node() 函数来任意触发任何节点打开。只需扫描树以查找未打开的父母并打开它们。

示例: http://jsfiddle.net/mmeah/yyy8W/

$("#findChild").click(function(){
    $.jstree._reference(myTree).open_node("#Node_001",function(){;},false);
});
$("#findGrandChild").click(function(){
    var closedParents = $("#Node_003").parents("li.jstree-closed");
    for(var i=closedParents.length-1;i>=0;i--){
        pleaseOpen($(closedParents[i]));
    }
});

function pleaseOpen(thisNode){
    if(typeof thisNode=="undefined") return;
    if(thisNode.hasClass("jstree-leaf") || thisNode.hasClass("jstree-open") ) return;
    $.jstree._reference(myTree).open_node(thisNode,function(){;},true);
}

【讨论】:

  • 非常感谢。你节省了我的时间。
【解决方案2】:

啊哈,我在正确的轨道上,但我的深层链接解析代码和树的构造之间存在竞争条件

选择节点并触发事件

$("#tree").jstree("select_node", selector).trigger("select_node.jstree");

在树加载后执行此操作以使其正常工作...

$("#tree").jstree(...).bind("loaded.jstree", function () 
{
    $("#tree").jstree("select_node", selector).trigger("select_node.jstree");
});

【讨论】:

  • 我必须用什么来代替那个“...”?
  • 我收到错误 0x800a01b6 - JavaScript 运行时错误:对象不支持属性或方法“触发器”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
  • 2021-06-08
  • 1970-01-01
  • 2018-10-22
  • 2011-11-12
  • 1970-01-01
相关资源
最近更新 更多