1
    <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 をトラバースし、項目を ABCBDCD E として出力します。指定されたリンクのように、これを折りたたみ可能なリストにしたい: http://www.sendesignz.com/index.php/jquery/77-how-to -create-expand-and-collapse-list-item-using-jquery

折りたたみ可能にする方法についてのヒントはありますか?

編集:助けてくれてありがとう。申し訳ありませんが、複数の回答を正解として受け入れることはできません。なので式流解も正解です。

4

3 に答える 3

2

まず、その例と同じ HTML を生成する必要があります (div の代わりに ul と li を使用)。

$(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/

于 2013-04-10T12:02:28.757 に答える
1

JQuery のトグル効果を使用すると、次のようになります。

$("#CollapseTrigger").click(function () {
    $("#ListToBeHidden").toggle("slow");
});
于 2013-04-10T09:46:34.047 に答える
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');
                       }
                   }
               });
          }
     );
    

UPDATE1 : この JS コードを試してみると、ポイント 1 で書いたように結果が出力されます *注 : コードは最適化されていません *

 $(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);
  });

UPDATE 2 JSFiddle

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

于 2013-04-10T10:01:22.300 に答える