Проблема в строке 34 файла jquery.tree.js (в пределах jQuery.fn.save_paths()
):
var pos = jQuery(open_nodes[i]).parent().prevAll().length;
open_nodes[i]
- это открытие / закрытие span
, егоparent - li
, и поэтому с prevAll()
он считает количество предыдущих li
s.
Но далее вниз по в строке 68 (в пределах jQuery.fn.restore_paths()
):
obj = jQuery(obj.children('li').children('ul')[path[j]]);
он использует сохраненную позицию из save_paths()
, чтобы найти nth ul
.
Так что в вашем случае, после расширения первого (и только) ul
, save_paths()
помнит 1
(так как перед ul
стоит 1 li
), но при перезагрузке страницы restore_paths()
попытался развернуть "второй" ul
(первый - 0
, aсекунда ul
- это 1
).
Хм, я не думаю, что объясняю это очень хорошо ...
В любом случае, решение состоит в том, чтобы изменить строку34 от этого:
var pos = jQuery(open_nodes[i]).parent().prevAll().length;
до этого:
var pos = jQuery(open_nodes[i]).parent().prevAll(':has(">ul")').length;
Это обеспечит пропуск li
с, которые не имеют вложенного ul
при расчете тока ul
.
Я отправил запрос на извлечение в pioz сэто исправить.В то же время вы можете использовать исправленную версию с моего форка: https://github.com/jefferyto/jquery-tree/raw/counting-fix/jquery.tree.js.
Вы можете увидеть, как она работает здесь: http://jsbin.com/emaku4/28
Обновление: pioz commit(другое) исправление.Вы можете скачать рабочий код на https://github.com/pioz/jquery-tree. Спасибо, пиоз!