jstree:Select jstree 中的节点按名称属性而不是 id
jstree: Select a node in jstree by name attribute rather than id
我需要 select jstree 中的一个节点的属性名称。然后在 selecting 该节点后,我需要获取它的 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)
})
非常欢迎您的帮助。非常感谢
使用 ID 作为选择器(在 jstree 函数中)时,不要提供前导 #
,仅使用 ID。
至于这个问题 - 不幸的是,这行不通,因为 jstree 仅在 DOM 中保留可见节点,这意味着如果您的 LI 节点未显示(例如,如果其父节点已关闭),您将无法在 DOM.
中找到它
我不确定在 LI 节点上具有名称属性是否有效,但无论如何 - 如果您坚持以这种方式查找节点,则必须遍历内部 jstree 模型。这是你如何做的:
http://jsfiddle.net/DGAF4/450/
我认为这会有所帮助
<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" }
]
}
]
}
});
这是我从 vakata 的 fiddle 中编写的函数。将 'MyAttribute' 设置为您的属性。将 'MyAttribute's 值传递给函数,它将 select 您的 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;
}
}
}
您可以获得所有节点的平面数组,并且无需递归搜索名称即可获取节点的 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;
}
}
我需要 select jstree 中的一个节点的属性名称。然后在 selecting 该节点后,我需要获取它的 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)
})
非常欢迎您的帮助。非常感谢
使用 ID 作为选择器(在 jstree 函数中)时,不要提供前导 #
,仅使用 ID。
至于这个问题 - 不幸的是,这行不通,因为 jstree 仅在 DOM 中保留可见节点,这意味着如果您的 LI 节点未显示(例如,如果其父节点已关闭),您将无法在 DOM.
中找到它我不确定在 LI 节点上具有名称属性是否有效,但无论如何 - 如果您坚持以这种方式查找节点,则必须遍历内部 jstree 模型。这是你如何做的: http://jsfiddle.net/DGAF4/450/
我认为这会有所帮助
<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" }
]
}
]
}
});
这是我从 vakata 的 fiddle 中编写的函数。将 'MyAttribute' 设置为您的属性。将 'MyAttribute's 值传递给函数,它将 select 您的 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;
}
}
}
您可以获得所有节点的平面数组,并且无需递归搜索名称即可获取节点的 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;
}
}