Frage

Also, ich habe eine Navigation, die eine Liste ist und Teil-Listen und Unterlisten.

Grundsätzlich ist das nav standardmäßig reduziert, aber wenn die Leute auf einer Seite klicken, dass die in einer Unterliste, ich möchte die Eltern die Liste anzuzeigen. Und wenn es ein sublist eines sublist ist, muss ich beide Eltern Listen anzuzeigen. Ich habe es eingerichtet, aber ich weiß nicht, wie wenn man 5 .parent (). Parent () ‚s nach oben zu durchqueren der Liste zu erweitern. Gibt es eine effizientere Art und Weise?

die HTML:

<div id="lesson-sidebar">
        <ul>
            <li><a href="index.html">Welcome to Beat Basics and Beyond</a></li>
            <li><a href="table-of-contents.html">What's in this course?</a></li>
            <li><a href="defining-your-beat.html" class="active">Defining Your Beat</a>
                <ul>
                    <li><a href="boundaries-of-your-beat.html">Boundaries of Your Beat</a></li>
                    <li><a href="the-beat-description.html">The Beat Description</a></li>
                    <li><a href="build-your-own-beat-description.html"><span class="ital">Activity:</span> Build Your Own Beat Description</a></li>
                </ul>
            </li>
            <li><a href="getting-started.html">Getting Started</a>
                <ul>
                    <li><a href="debrief-your-predecessor.html">Debrief Your Predecessor</a></li>
                    <li><a href="predecessor-top-five-tips.html"><span class="ital">Activity:</span> List The Top Five Tips From Your Predecessor</a></li>
                    <li><a href="covering-your-beat-with-the-internet.html">Covering Your Beat With The Internet</a></li>
                    <li><a href="get-in-the-car-and-go.html">Get in the Car and Go</a></li>
                    <li><a href="mapping-your-beat.html">Mapping Your Beat</a></li>
                    <li><a href="read-the-clips.html">Read the Clips</a></li>
                    <li><a href="activity-dissect-this-clip.html"><span class="ital">Activity:</span> Dissect This Clip</a></li>
                    <li><a href="writing-your-first-article.html">Writing Your First Article</a></li>
                    <li><a href="starting-cold-on-the-beat.html">Starting Cold on the Beat</a></li>
                </ul>           
            </li>
            <li><a href="working-with-sources.html">Working With Sources</a>
                <ul>
                    <li><a href="finding-sources.html">Finding Sources</a></li>
                    <li><a href="diversify-your-sources.html">Diversify Your Sources</a></li>
                    <li><a href="prospecting-for-stories-and-sources.html">Prospecting for Stories and Sources</a></li>
                    <li><a href="building-relationships.html">Building Relationships</a></li>
                    <li><a href="going-off-the-record.html">Going Off the Record</a></li>
                </ul>
            </li>
            <li><a href="developing-resources.html">Developing Resources to Help You on the Beat</a>
                <ul>
                    <li><a href="develop-a-calendar-of-events.html">Develop a Calendar of Events</a></li>
                    <li><a href="build-your-library.html">Build Your Library</a></li>
                    <li><a href="learn-the-open-record-laws.html">Learn the Open Record Laws</a></li>
                </ul>
            </li>
            <li><a href="extra-resources.html">Extra Resources</a>
                <ul>
                    <li><a href="beat-breakdown-tool.html">Beat Breakdown Tool</a></li>
                    <li><a href="links-library.html">Links Library</a>
                        <ul>
                            <li><a href="general-resources-for-any-beat.html">General Resources for Any Beat</a></li>
                            <li><a href="courts-and-criminal-justice-links.html">Courts and Criminal Justice Links</a></li>
                            <li><a href="education-resources.html">Education Resources</a></li>
                            <li><a href="local-government-links.html">Local Government Links</a></li>
                            <li><a href="neighborhood-or-suburban-links.html">Neighborhood or Suburban Links</a></li>
                            <li><a href="police-and-public-safety-links.html">Police and Public Safety Links</a></li>
                            <li><a href="reporter-organizations.html">Reporter Organizations</a></li>
                        </ul>
                    </li>
                    <li><a href="additional-reading.html">Additional Reading</a></li>
                </ul>
            </li>
            <li><a href="final-thoughts.html">Final Thoughts</a></li>
        </ul>

Die jQuery:

function toggleSubmenu() {

    if ($(this).hasClass('submenu-hidden')) {

        $(this).parent().children('ul').slideToggle();
        $(this).removeClass().addClass('submenu-visible');

    } else if ($(this).hasClass('submenu-visible')) {

        $(this).parent().children('ul').slideToggle();
        $(this).removeClass().addClass('submenu-hidden');
    }
}

$('#lesson-sidebar ul ul').hide();
$('#lesson-sidebar ul ul ul').hide();
$('#lesson-sidebar ul:first-child').attr('id', 'rootlist');
$('#lesson-sidebar ul li:has("ul")').prepend('<span class="submenu-hidden"></span>').css('list-style','none');

$('#lesson-sidebar ul li a').each(
    function() {
        if ($(this).hasClass('active')) {
            // if it is a UL
            var length = $(this).parent().find("ul").length;
            alert(length);
            if (length == 0) {
                if ($(this).parent().parent().parent().children('span').hasClass('submenu-hidden')) {
                        $(this).parent().parent().parent().children('ul').show();
                        $(this).parent().parent().parent().children('span').removeClass('submenu-hidden').addClass('submenu-visible');
                }
                if ($(this).parent().parent().parent().parent().parent().children('span').hasClass('submenu-hidden')) {
                        $(this).parent().parent().parent().parent().parent().children('ul').show();
                        $(this).parent().parent().parent().parent().parent().children('span').removeClass('submenu-hidden').addClass('submenu-visible');
                } 
            }
            if (length == 1) {
                $(this).parent().find('ul').slideToggle();
                $(this).parent().children('span').removeClass('submenu-hidden').addClass('submenu-visible');
            }               
        }
    }
);

$('ul#rootlist > li span, ul#rootlist li ul li > span').bind('click', toggleSubmenu);

Jede und alle Hilfe ist majorly geschätzt.

War es hilfreich?

Lösung

Wenn ich verstehe, was Sie versuchen zu tun ... Sie können etwas tun:

// For my benefit, hide all lists except the root items
$('ul, li', $('#lesson-sidebar ul li')).hide();

// Show active parents and their siblings
$('li a.active').parents('ul, li').each(function() {
    $(this).siblings().andSelf().show();
});

// Show the active item and its siblings
$('li a.active').siblings().andSelf().show();

Die Eltern () und Geschwister () sind Methoden der Sache sowohl ideal für diese Art.

Edit: Es war ein Fehler vor, wo es nicht Eltern Geschwister zeigt. Versuchen Sie, diese neue Version.

Edit 2:. Jetzt funktioniert es mit class = „aktiv“ auf dem Anker anstelle des Listenelement

Andere Tipps

$(this).closest("ul") werden die Eltern durchqueren, bis sie eine ul findet

http://docs.jquery.com/Traversing/closest#expr

  

... das erste Element erhalten, das die Wähler übereinstimmt, indem das Element selbst zu testen und durchqueren nach oben durch seine Vorfahren im DOM-Baum ...

Um Lance McNeary die sehr hilfreiche Antwort zu vereinfachen, ist der Trick zu verwenden ist:

.parents([selector])
  

ein jQuery-Objekt gegeben, dass eine Reihe von DOM-Elementen darstellt, die   .parents () Methode ermöglicht es uns, durch die Vorfahren von diesen suchen   Elemente im DOM-Baum und ein neues jQuery Objekts aus dem Konstrukt   Anpassungselemente von unmittelbar übergeordneten auf bis bestellt; die Elemente   sind, um von dem nächsten Elternteil der äußeren zurückgegeben.

Ein anderer Benutzer vorgeschlagen:

.closest([selector])

Ähnlich wie .parents (), kann dies eine bessere Wahl sein, da es stoppt, sobald es das Element findet er sucht. Scheint, wie es effizienter, in diesem Fall wäre. Siehe http://api.jquery.com/closest/ für weitere Details. Hoffe, das hilft den Menschen, die Unterschiede zwischen .closest verstehen () und .parents () und wie leistungsfähig und flexibel jQuery können.

$(this).parents().get()[4] geben Ihnen die fünfte

Versuchen Sie es mit dieser Codezeile:

$(this).parent().parent().fadeOut();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top