jstree:按名称属性选择jstree中的节点,而不是id

时间:2015-04-23 10:47:16

标签: javascript jquery jstree

我需要通过它的属性名称在jstree中选择一个节点。然后在选择该节点后,我需要获取它的id。 基本上我想得到一个给定名称的节点的id。

我尝试了以下代码:

$("#tree1").bind("loaded.jstree", function (e, data) {

var isa_name = "ISA16469";

//$("#tree1").jstree("select_node", "#01"); //this code works but it selects by id, I want to select by attribute name

$("#tree1").jstree("select_node", $("li[name='" + isa_name + "']")); //doesn't work

var test = $('#tree1').jstree('get_selected').attr('id'); //get id of selected node
alert(test)

})

非常欢迎您的帮助。非常感谢

4 个答案:

答案 0 :(得分:4)

使用ID作为选择器(在jstree函数中)时,请不要提供前导#,仅使用ID。

关于这个问题 - 不幸的是,这不起作用,因为jstree只保留DOM中的可见节点,这意味着如果你的LI节点没有被显示(例如,如果它的父节点被关闭),你将无法找到它在DOM中。

我不确定LI节点上的name属性是否有效,但无论如何 - 如果你坚持以这种方式找到节点,你将不得不遍历内部jstree模型。这是你如何做到的: http://jsfiddle.net/DGAF4/450/

答案 1 :(得分:1)

这是我根据vakata的小提琴编写的函数。将“ MyAttribute”设置为您的属性。将'MyAttribute'的值传递给该函数,它将按属性选择您的JSTree节点。

//SELECT JSTREE by Attribute 
function selectNodeByMyAttribute (AttrValue) {
    $("#jstree").jstree().deselect_all(true);

    var instance = $("#jstree").jstree(true);
    var m = instance._model.data;
    for (var i in m) {
        if (m.hasOwnProperty(i) && i !== '#' && m[i].li_attr.MyAttribute && m[i].li_attr.MyAttribute === AttrValue) {
            instance.select_node(i);
            break;
        }
    }
}

答案 2 :(得分:0)

我认为这会有所帮助

<div id="jstree"></div>

$("#jstree").on('ready.jstree', function () {
var instance = $("#jstree").jstree(true);
var branchCont = instance._model.data;

for(var branchKey in branchCont) {

  var branch = branchCont[branchKey];
  if(branch.text && branch.text === "Child node 1") {

    instance.select_node(branchKey);
    break;
  }
}
});

$("#jstree").jstree({
'core' : {
    'data' : [
        { "text" : "Root node", "children" : [
            { "text" : "Child node 1" },
            { "text" : "Child node 2" }
        ]
        },
        { "text" : "Root node2", "children" : [
            { "text" : "Child node B1" },
            { "text" : "Child node B2" }
        ]
        }
    ]
}
});

https://jsfiddle.net/shubojs/qj8hty83/3/

答案 3 :(得分:0)

可以得到所有节点的平面数组,不递归地搜索名称就可以得到节点的id。此代码将为您提供具有搜索名称的节点的最后一次出现。

var m = $("#tree1").jstree(true).get_json('#', {flat:true});
for(var i in m) {
      if(m[i].text === isa_name ) {
        myId =  m[i].id;
      }
 }