dudeonthehorse
@dudeonthehorse
Email Developer

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

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



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




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



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



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




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



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



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




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



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

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

Похожие вопросы