Мне нужно получить отмеченные чекбоксами ноды вот в таком формате
[{<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(){… })