Как выбрать только один узел в jstree, когда несколько узлов имеют одинаковый идентификатор - PullRequest
1 голос
/ 29 марта 2012

Я выполняю поиск по ключевому слову и получаю соответствующий идентификатор узла в jstree.

Теперь мне нужно перемещаться по дереву js с помощью кнопок «Далее» и «предыдущий».

Я использую нижестроки кода, который выбирает все узлы, имеющие одинаковые спецификации.

_selectCurrentTreeNode : function() {

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

}

В моем случае есть три узла с одинаковыми спецификациями, но я хочу выбрать только один узел за раз, и после нажатия кнопки «Далее» я хочу выбрать другой узел.

Как мне написать эту логику.

Ответы [ 5 ]

4 голосов
/ 29 марта 2012

Только боковой узел, согласно рекомендациям HTML, вам не разрешено иметь несколько элементов с одинаковым идентификатором.Они должны быть уникальными

1 голос
/ 03 апреля 2012
.bind("click.jstree", function (e, data) {
                    var id=a.attr('id');                                    
}
0 голосов
/ 15 марта 2017

Я попробовал этот код, и он работает для меня:

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);
}
0 голосов
/ 03 апреля 2012

Для этого нужно использовать class.Селекторы javascript для идентификатора (#) предназначены для выбора только одного элемента, поскольку запрещено использовать несколько элементов с одинаковым идентификатором (= уникальный идентификатор).

Вместо этого используйте class, а затемможно выполнить итерацию по набору результатов, чтобы получить каждый соответствующий элемент.

0 голосов
/ 03 апреля 2012

Класс каждого узла пуст. Класса нет.

Я понимаю, что он должен иметь уникальный идентификатор. Я получаю данные из другого источника, и это является деловым требованием иметь некоторый дубликат 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);

To Do: В случае дублирования specID мне нужно выбрать только один за раз. При нажатии кнопки «Далее» мне нужно выбрать следующий узел с дублирующимся specID.

Любая помощь будет оценена.

...