2016-03-31 6 views
0

Ich habe eine ul-Liste, die, wenn ich auf ein Element klicken schaltet die anderen Elemente im Inneren hat:Wie kann ich eine geschachtelte ul Liste zusammenklappen?

<ul> 
    <li><a href "#">Hello World</a> 

     <ul> 
      <li><a href "#">Hello World</a> 

      </li> 
      <li><a href "#">Hello World</a> 

       <ul> 
        <li><a href "#">Hello World</a> 

        </li> 
        <li><a href "#">Hello World</a> 

        </li> 
       </ul> 
      </li> 
      <li><a href "#">Hello World</a> 

      </li> 
     </ul> 
    </li> 
    <li><a href "#">Hello World</a> 

    </li> 
    <li><a href "#">Hello World</a> 

    </li> 
    <li><a href "#">Hello World</a> 

    </li> 
</ul> 

Dies ist das Skript:

$('li a').click(function (e) { 
    e.preventDefault(); 
    var ullist = $(this).parent().children('ul:first'); 
    ullist.slideToggle(); 
}); 

Here is the fiddle

Ich würde das gerne Beim Seitenladen werden alle "Ordner" geschlossen.

Ich habe versucht, es so zu tun:

$(window).load(function(){ 
    var ullist = $('li a').parent().children('ul:first'); 
    ullist.hide(); 
    $('li a').click(function (e) { 
     e.preventDefault(); 
     var ullist = $(this).parent().children('ul:first'); 
     ullist.slideToggle(); 
    }); 
}); 

aber dann nur die Haupt „Ordner“ geschlossen ist, und wenn ich darauf klicken, werden alle anderen Ordner geöffnet sind.

+0

ich das Ergebnis haben! "Var ullist = $ ('li a'). Parent(). Children ('ul: first');' in 'var ullist = $ ('li a'). Parent(). Children ('ul '); ' – Jarla

+0

Aber das Problem mit meiner Lösung, alle Ordner und Inhalt wird für eine Sekunde vor dem Verstecken gespült. Kann dies verhindert werden? – Jarla

+1

Wenn Ihre Antwort gelöst ist, beantworten Sie Ihre eigene Frage und markieren Sie sie als Gelöst. In Bezug auf deinen letzten Kommentar, wenn du möchtest, dass sie eine Sekunde lang "flush" vor dem Ausblenden verhindern, warum sollte man dann nicht die CSS-Eigenschaft für diese "ul" als versteckt setzen? Auf diese Weise werden sie standardmäßig ausgeblendet und haben weiterhin die Funktionalität, die Sie geschrieben haben. – Unapedra

Antwort

1

Um alle Listen zusammenbrechen Sie bereit zu ändern $('ul ul').hide() auf Dokument verwenden können:

0

Ich habe das Ergebnis! Sie benötigen var ullist = $('li a').parent().children('ul:first'); in var ullist = $('li a').parent().children('ul');

Verwandte Themen