<script>
$(document).ready(function(){
var xml = "<root> \
<method name='A'> \
<childcall name='B'></childcall> \
<childcall name='C'></childcall> \
</method> \
<method name='B'> \
<childcall name='D'></childcall> \
</method> \
<method name='C'> \
<childcall name='D'></childcall> \
<childcall name='E'></childcall> \
</method> \
</root>";
var data = $.parseXML(xml);
console.log(data);
$(data).find('method').each(function(){
var name = $(this).attr('name');
$('<div class="items"></div>').html('<a href="'+name+'">'+name+'</a>').appendTo('#page-wrap');
$(this).children('childcall').each(function(){
name = $(this).attr('name');
$('<div class="items"></div>').html('<a href="'+name+'">'+name+'</a>').appendTo('#page-wrap');
});
});
});
</script>
<body>
<div id="page-wrap"></div>
</body>
上面的代码遍历xml并打印项目为 - A B C B D C D E. 我想将此列为可折叠列表,例如在给定链接中:http://www.sendesignz.com/index.php/jquery/77-how-to-create-expand-and-collapse-list-item-using-jquery
有关如何使其可折叠的任何提示?
编辑:谢谢你的帮助。对不起,我不能接受多个答案是正确的。所以Shikiryu解决方案也是正确的。答案 0 :(得分:2)
首先,您需要生成与该示例相同的HTML(使用ul和li而不是div)
$(data).find('method').each(function(){
var hasChild = $(this).children('childcall').length > 0;
curLi += '<li';
curLi += ((hasChild) ? ' class="category plusimageapply">': '>');
curLi += $(this).attr('name');
if(hasChild){
curLi += '<ul>';
$(this).children('childcall').each(function(){
var name = $(this).attr('name');
curLi += '<li><a href="'+name+'">'+name+'</a></li>';
});
curLi += '</ul>';
}
curLi += '</li>';
});
$('#test').append(curLi);
请注意,它可以进行优化。
然后,你需要指出一些CSS(隐藏孩子,添加+和 - 等)
.category ul{display:none;}
最后,您需要应用他们的JS
$('li.category').click(function(event){
if($(this).is('.plusimageapply')) {
$(this).children().show();
$(this).removeClass('plusimageapply');
$(this).addClass('minusimageapply');
}
else
{
$(this).children().hide();
$(this).removeClass('minusimageapply');
$(this).addClass('plusimageapply');
}
});
答案 1 :(得分:1)
使用JQuery的切换效果,它是这样的:
$("#CollapseTrigger").click(function () {
$("#ListToBeHidden").toggle("slow");
});
答案 2 :(得分:1)
如果您需要完全按照链接中的说明进行打印
编辑你的js代码,输出像这样的HTML
<ul>
<li class="category">Menu 1
<ul>
<li>Menu 1 sub 1</li>
<li>Menu 2 sub 2</li>
</ul>
</li>
<li>Menu 2</li>
</ul>
我们提供的JS代码
$('li.category').addClass('plusimageapply');
$('li.category').children().addClass('selectedimage');
$('li.category').children().hide();
$('li.category').each(
function(column) {
$(this).click(function(event){
if (this == event.target) {
if($(this).is('.plusimageapply')) {
$(this).children().show();
$(this).removeClass('plusimageapply');
$(this).addClass('minusimageapply');
}
else
{
$(this).children().hide();
$(this).removeClass('minusimageapply');
$(this).addClass('plusimageapply');
}
}
});
}
);
UPDATE1:尝试这个JS代码,它将打印我在第一点写的结果 * 注意:代码未经过优化*
$(document).ready(function(){
var xml = "<root> \
<method name='A'> \
<childcall name='B'></childcall> \
<childcall name='C'></childcall> \
</method> \
<method name='B'> \
<childcall name='D'></childcall> \
</method> \
<method name='C'> \
<childcall name='D'></childcall> \
<childcall name='E'></childcall> \
</method> \
</root>";
var data = $.parseXML(xml);
console.log(data);
var htmltxt="test<ul>";
$(data).find('method').each(function(){
var namenode = $(this).attr('name');
var count = 0;
$(this).children('childcall').each(function(){ count++; });
if(count>0){
htmltxt = htmltxt + "<li='category'>" + namenode +"<ul>";
$(this).children('childcall').each(function(){
var name = $(this).attr('name');
htmltxt = htmltxt + "<li>" + name + "</li>";
});
htmltxt = htmltxt + "</ul></li>";
}else{
htmltxt = htmltxt +"<li>"+namenode+"</li>";
}
});
htmltxt = htmltxt + "</ul>";
$("#page-wrap").html(htmltxt);
});
更新2 JSFiddle