使用JQuery的可折叠列表

时间:2013-04-10 09:34:13

标签: javascript jquery collapsable

    <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解决方案也是正确的。

3 个答案:

答案 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');
    }
});

这给出了:http://jsfiddle.net/dujRe/1/

答案 1 :(得分:1)

使用JQuery的切换效果,它是这样的:

$("#CollapseTrigger").click(function () {
    $("#ListToBeHidden").toggle("slow");
});

答案 2 :(得分:1)

如果您需要完全按照链接中的说明进行打印

  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>
    
  2. 我们提供的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');
                       }
                   }
               });
          }
     );
    
  3. 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

    http://jsfiddle.net/faraqsa/CKa6V/