Теперь j
является глобальной переменной из-за объявления без var
.
Выше значение j
влияет на другие исполнения remove()
.
Изменение j=0;
на var j=0;
устраняет эту проблему, но она вызывает бесконечный цикл.
Кажется, что рекурсия remove()
блокирует отражение значения tree
до $('#jstree-tree')
.
Чтобы избежать этой проблемы, выполните tree = ...get_json(...)
на внешней стороне рекурсии и используйте ее повторно.
Это рабочий код:
function remove(arg)
{
tree = $('#jstree-tree').jstree(true).get_json('#', {flat:true});
var _remove = function (i) {
var j = 0;
while(j < tree.length)
{
if(tree[i].id == tree[j].parent)
{
_remove(j);
j--;
}
j++;
}
tree.splice(i,1);
}
_remove(arg);
}