2017-01-13 3 views
1

Ich habe eine Frage zu Jquery. Wenn ich auf Link1 klicke, das keine ul.children hat und die Klasse current_page_item hinzugefügt wird (in diesem Code nicht gezeigt, da es automatisch von Wordpress hinzugefügt wird), sollte ul.children in Link2 ausgeblendet werden.Jquery zeigen oder verbergen Kinder Link, wenn es verfügbar ist

Wenn ich auf Link 2 klicke, der beide Klasse page_item_has_children current_page_item hat, sollte in diesem Fall ul.children angezeigt werden. Ich habe versucht, meinen Code brüllen, was ich weiß, dass es absolut falsch ist. Bitte geben Sie mir Ihre Ratschläge. Danke vielmals.

if($(.navigation).hasClass(page_item_has_children)){ 
 
    (.navigation .page_item_has_children .children).hide(); 
 
}else if($(.navigation).hasClass(page_item_has_children) && $(.navigation).hasClass(current_page_item)){ 
 
    (.navigation .page_item_has_children .children).show(); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<ul class="navigation"> 
 
<li><a href="#">Link1</a></li> 
 
<li class="page_item_has_children current_page_item"><a href="#">Link2</a> 
 
    <ul class="children"> 
 
\t <li class="page_item"><a href="#">Link3</a></li> 
 
\t <li class="page_item "><a href="#">Link4</a></li> 
 
    </ul> 
 
</li> 
 
</ul>

+0

Das erste, was in allen Ihren JavaScript-Selektoren, Sie brauche eine Art Anführungszeichen um die Selektornamen. Als zweites verwenden Sie innerhalb jeder Ihrer if-Anweisungen $() nicht, um die nav-Elemente auszuwählen. Kleine Dinge trip uns auf ... – Snowmonkey

+0

Danke für Ihren Kommentar. Ich lerne Jquery und Java, also habe ich noch Klebstoff darüber. Haben Sie eine gute Quelle, um Jquery mit Bewegung zu erlernen? Ich habe es gegooglet, aber wenn Sie bitte teilen. – Tony

+0

Sitepoint hat einige gute Bücher, schau dir ihre "Novice to Ninja" -Reihe an. Wirklich, obwohl ich einer der ursprünglichen Betatester für jQuery war, besuchte die erste jQueryCon in Cambridge, habe noch das T-Shirt! Kommt zum Üben zum Üben ... – Snowmonkey

Antwort

0

Wie wäre es einfach alle verschachtelten UL Elemente versteckt, dann einfach die Kinder des angeklickten eine zeigt?

$(".navigation li").each(function() { 
 
    // When we first load, hide all nested menus. 
 
    $(this).children("ul").hide(); 
 
    if (localStorage.menuNumber) { 
 
    $(".navigation li").eq(localStorage.menuNumber).children().show(); 
 
    } 
 
    }) 
 
    .on("click", function() { 
 
    // When any top-level ul is clicked, hide the 
 
    // nested menus then show the current one. 
 
    $(this).parent().children().find("ul").hide(); 
 
    $(this).children().show(); 
 
    // We also want to persist this selection, 
 
    // should the user refresh... 
 
    localStorage.menuNumber = $(this).index; 
 
    
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<ul class="navigation"> 
 
    <li><a href="#">Link1</a> 
 
    </li> 
 
    <li class="page_item_has_children current_page_item"><a href="#">Link2</a> 
 
    <ul class="children"> 
 
     <li class="page_item"><a href="#">Link3</a> 
 
     </li> 
 
     <li class="page_item "><a href="#">Link4</a> 
 
     </li> 
 
    </ul> 
 
    </li> 
 
</ul>

es Edited so dass, wenn es anfänglich geladen wird, alle verschachtelten uls versteckt sind. Hoffe das hilft! Und erneut bearbeitet, um das angeklickte Menü im lokalen Speicher zu speichern. Leider wird dies aus Sicherheitsgründen hier nicht funktionieren. Sehen Sie es als eine Geige: https://jsfiddle.net/snowMonkey/fnuvvLwb/

+0

Wie bearbeiten Sie Ihren Code, um es zu arbeiten? Als ob ich in Link1 bin und ich den Refresh-Browser drücke, wird '' u.children''' angezeigt, also muss ich erneut auf Link1 klicken, um '' 'u.children''' versteckt zu werden. – Tony

+0

Danke. Es funktioniert jetzt, aber wenn ich in Link2 bin und den Browser aktualisiere, ist '' u.children''' versteckt, bis ich erneut auf Link2 klicke. – Tony

+0

Und es wird. Aktualisieren löscht alle Beweise von irgendetwas. Nach dem Zeitpunkt der Aktualisierung bleiben die Seitendaten normalerweise erhalten. Wenn Sie dies tun möchten, würde es etwas wie localStorage erfordern - im Grunde würden Sie ein Cookie speichern, das anzeigt, auf welchen Menüpunkt geklickt wurde, und es nach der Aktualisierung wieder einlesen. – Snowmonkey

0

Diese Lösung ein bisschen mehr in Richtung Ihrer Szenario (herausgegeben basierend auf Kommentar):

$(".navigation li").on("click", function() { 
 
    if ($(this).hasClass("page_item_has_children") && $(this).hasClass("current_page_item")) { 
 
    $(".navigation .children").show(); 
 
    } else { 
 
    $(".navigation .children").hide(); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul class="navigation"> 
 
    <li><a href="#">Link1</a> 
 
    </li> 
 
    <li class="page_item_has_children current_page_item links"><a href="#">Link2</a> 
 
    <ul class="children"> 
 
     <li class="page_item"><a href="#">Link3</a> 
 
     </li> 
 
     <li class="page_item "><a href="#">Link4</a> 
 
     </li> 
 
    </ul> 
 
    </li> 
 
</ul>

+0

Vielen Dank für Ihre Antwort. Link1 hat keine '' 'page_item_has_children''' Klasse' '' li''', da diese Klasse automatisch von Wordpress hinzugefügt wird, wenn '' 'ul.children''' – Tony

+0

Sorry, ich habe bearbeitet. – Syden

Verwandte Themen