当多个节点具有相同的ID时,如何在jstree中仅选择一个节点

时间:2012-03-29 12:55:09

标签: jquery jstree

我使用关键字进行搜索,并在jstree中获取匹配节点ID。

现在我必须使用“下一步”和“上一步”按钮在js树中导航。

我使用下面的代码行选择具有相同specId的所有节点。

_selectCurrentTreeNode : function() {

var specId = this._currentMatches[this._currentCursorPosition];
this._specTree.jstree("select_node", "#" + specId);

}

在我的情况下,有三个节点具有相同的specId,但我想一次只选择一个节点,点击“下一步”按钮后我想选择另一个节点。

我该怎么写这个逻辑。

5 个答案:

答案 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);
}