Проблема в том, что вы не можете сделать это:
ret[$(this).attr("id")] = _recursiveItems(this);
, потому что var ret = []
объявляет ret
как массив , а не как объект, а $(this).attr("id")
не является числовым(его значение head_1
).Он пытается создать ассоциативный массив, который не поддерживается. .Ассоциативные массивы JavaScript должны быть числовыми и даже считаться вредными .
Если вы измените объявление на var ret = {}
, вы можете использовать jquery-json для преобразованияобъект в JSON.Вот демо с использованием кода в вопросе.