Я новичок в JQuery и веб-разработке в целом. Я пытаюсь загрузить некоторые данные из файла XML и создать неупорядоченный список. У меня эта часть работает, теперь я пытаюсь использовать плагин TreeView , чтобы я мог свернуть / развернуть данные. Данные загружаются так:
$(document).ready(function(){
$.ajax({
type: "GET",
url: "solutions.xml",
dataType: ($.browser.msie) ? "text" : "xml",
success: function(data) {
var xml;
if (typeof data == "string") {
// Work around IE6 lameness
xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = false;
xml.loadXML(data);
} else {
xml = data;
}
list = ""
$(xml).find("Group").each(function() {
group = $(this).attr("name");
list += "<li><span>" + group + "</span><ul>";
$(this).find("Solution").each(function() {
solution = $(this).attr("name");
list += "<li><span>" + solution + "</span></li>";
});
list += "</ul></li>";
});
$("#groups").html(list);
},
error: function(x) {
alert("Error processing solutions.xml.");
}
});
$("#groups").treeview({
toggle: function() {
console.log("%s was toggled.", $(this).find(">span").text());
}
});
});
и HTML выглядит так:
<html>
...
<body>
<ul id="groups">
</ul>
</body>
</html>
Неупорядоченный список отображается правильно, но маленькие знаки [+] и [-] не отображаются, а секции не складываются и не расширяются. Если я избавлюсь от загрузки Ajax и вручную добавлю неупорядоченный список в #groups, он будет работать как положено.
Что я делаю не так? Есть ли другие плагины или библиотеки Javascript, которые могли бы сделать это проще? Решение должно работать на IE6 локально (т.е. на веб-сервере).
Обновление : я нашел обходной путь: если я определю свой материал в виде дерева следующим образом, он будет работать:
function makeTreeview() {
$("#container").treeview({
toggle: function() {
console.log("%s was toggled.", $(this).find(">span").text());
}
});
}
setTimeout('makeTreeview();', 50);
Я думаю, что проблема в том, что когда я создаю древовидное представление, материал ajax еще не выполнил свою работу, поэтому при вызове treeview () неупорядоченный список еще не создан. Я еще не проверял это с IE6. Есть ли лучший способ сделать это, не используя SetTimeout ()?