私はJQueryとWeb開発全般に不慣れです。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でローカル(つまりWebサーバー)で動作する必要があります。
更新:回避策を見つけました:ツリービューのものを次のように定義すると、次のように機能します。
function makeTreeview() {
$("#container").treeview({
toggle: function() {
console.log("%s was toggled.", $(this).find(">span").text());
}
});
}
setTimeout('makeTreeview();', 50);
問題は、treeviewを作成するときに、ajaxのものがまだ機能していないため、treeview()が呼び出されたときに、順序付けされていないリストがまだ作成されていないことだと思います。私はまだIE6でこれをテストしていません。SetTimeout()を使用せずに、これを行うためのより良い方法はありますか?