dudeonthehorse
@dudeonthehorse
Email Developer

Экспорт checked нодов в JStree?

Мне нужно получить отмеченные чекбоксами ноды вот в таком формате

[{
    "data": "Reference",
    "attr": {
        "id": "0",,
        "class": "reference"
    },
    "children": [{
        "data": "New node 1",
        "attr": {
            "id": "2"
        },
        "state": "closed"
    }, {
        "data": "New node 2",
        "attr": {
            "id": "4"
        }
    }, {
        "data": "New node 3",
        "attr": {
            "id": "6"
        }
    }]
}]


И поэтому родная функция get_checked мне не подходит.

При выборе нода чекбоксом исполняю следующее:

.bind("check_node.jstree", function(e, data){
    $(tree).jstree("open_all",'#'+data.rslt.obj.attr("id"));
})


Это раскрывает всех детей и так же отмечает их.

Собственно функция экспорта:

function _recursion(id) {
        var list = [];
        var is_exist = false;
        $("#" + id + ">ul>li").each(function(index, element) {
            is_exist = true;
            childs = _recursion($(element).attr('id'));
            if (childs == false){
                if($(tree).jstree('is_checked','#'+$(this).attr('id'))){
                    list.push({"id": $(element).attr('id'),"title":$(element).find('a:first').text().trim(), "position": $(element).attr('data-pos')});
                }
            }else{
                list.push({"id": $(element).attr('id'),"title":$(element).find('a:first').text().trim(),"position": $(element).attr('data-pos'),"children": childs});
            }
        });

        if (is_exist == false) return false;
        return list;
    }

alert(JSON.stringify(_recursion('my-tree-id'))); // output json


Работает прекрасно для изначально прогруженного дерева, но енсли ноды подгружаются аяксом, то подгруженные ноды не попадают в json хотя были отмечены.

Вызываю функцию разумеется через $(document).on('click','#button',function(){… })
  • Вопрос задан
  • 3032 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы