Ваш HTML-код недействителен, и Chrome не принял его.Firefox был более снисходительным в том, что позволял.Всякий раз, когда существует много открытий и закрытий кавычек из-за динамического значения, лучше использовать создание элемента стиля объекта в jQuery, а не делать все это в строке.Проблема в этой строке:
$('li#node-'+nodes[i].id +'').append('<ul id="' + nodes[i].id +'>');
Вывод ul, который он производит (обратите внимание на отсутствующую цитату):
<ul id="1>
Для создания сложных селекторов гораздо лучше использовать строкузамена:
var li = "li#node-{id}".replace("{id}", nodes[i].id);
Чтобы создать элементы с динамическими атрибутами, используйте объекты для инициализации:
var ul = $('<ul>', {
id: nodes[i].id
});
Код ниже, хотя немного подробный и, возможно, немного медленный, трудно ошибиться, особеннона таком языке, как JavaScript, где пропущенная кавычка может нанести ущерб, как мы только что засвидетельствовали.
var li = "li#node-{id}".replace("{id}", nodes[i].id);
var ul = $('<ul>', {
id: nodes[i].id
});
$(li).append(ul);