我使用关键字进行搜索,并在jstree中获取匹配节点ID。
现在我必须使用“下一步”和“上一步”按钮在js树中导航。
我使用下面的代码行选择具有相同specId的所有节点。
_selectCurrentTreeNode : function() {
var specId = this._currentMatches[this._currentCursorPosition];
this._specTree.jstree("select_node", "#" + specId);
}
在我的情况下,有三个节点具有相同的specId,但我想一次只选择一个节点,点击“下一步”按钮后我想选择另一个节点。
我该怎么写这个逻辑。
答案 0 :(得分:4)
只是一个侧节点,根据HTML指南,您不能拥有多个具有相同ID的元素。它们应该是独一无二的
答案 1 :(得分:1)
.bind("click.jstree", function (e, data) {
var id=a.attr('id');
}
答案 2 :(得分:0)
每个节点的类都是空的。没有课。
我明白它应该有唯一的ID。我从其他来源获取数据,并且业务要求是有一些重复的ID。
我的要求是逐个选择树节点。
首先,我正在搜索节点并获取搜索节点的所有ID。现在我有“下一步”按钮点击,我必须在jstree中选择下一个匹配的节点。
我使用下面的代码来选择节点。
var allNodes = this._currentSearchableSpec.find("*");
var matchingTypeNodes = allNodes.filter("name");
// Using .each loop getting id of all mathching type nodes on matching pattern.
if (pattern.test(matchingTypeNodes.text())) {
var specId = $(matchingTypeNodes).attr("id");
// Then selecting node with specID
this._specTree.jstree("deselect_all");
this._specTree.jstree("select_node", "#" + specId);
待办事项:如果specID重复,我需要一次只选择一个。单击“下一步”按钮,我需要选择具有重复specID的下一个节点。
任何帮助将不胜感激。
答案 3 :(得分:0)
您需要使用class
。 ID(#
)的javascript选择器仅用于选择一个元素,因为禁止使用具有相同ID(=唯一标识符)的多个元素。
使用class
代替,然后您可以迭代结果集以获取每个匹配元素。
答案 4 :(得分:0)
我尝试了这段代码,它对我有用:
var selectedNodeId;
$('#evts')
.on("changed.jstree", function (e, data) {
if(typeof(data.node) !== "undefined"){
selectedNodeId = data.node.id;
if(selectedNode !== selectedNodeId)
selectOne(data);
}
if(data.selected.length) {
console.info('The selected node is: ' + data.instance.get_node(data.selected[0]).text);
}
})
.jstree({
'core' : {
'multiple' : false,
'data' : [
{ "text" : "Root node", "children" : [
{ "text" : "Child node 1", "id" : 1 },
{ "text" : "Child node 2","id":2, "children":[
{ "text" : "Child node 4","id":4},
{ "text" : "Child node 5","id":5}
]},
{ "text" : "Child node 3","id":3},
]}
]
},
"plugins":["checkbox"]
});
function selectOne(data){
var instance = $('#evts').jstree(true);
if(data.selected.length&&data.node.id!==selectedNodeId)
instance.deselect_all();
instance.select_node(selectedNodeId);
}