2010-02-18 2 views
3

J'ai une liste de liens. Quand l'un des liens est cliqué, je voudrais changer la visibilité de la div associée. Mon html ressemble à la suivante:en utilisant jquery pour changer la visibilité de divs avec du contenu imbriqué, onclick

<div id="tab"> 
<ul> 
<li id="tab1" class="active"><a href="#">Link 1</a></li> 
<li id="tab2"><a href="#">Link 2</a></li> 
<li id="tab3"><a href="#">Link 3</a></li> 
<li id="tab4"><a href="#">Link 4</a></li> 
</ul> 
</div> 

<div id="content1"><div class="nestedDiv">Content Here</div></div> 
<div id="content2"><div class="nestedDiv">Content Here</div></div> 
<div id="content3"><div class="nestedDiv">Content Here</div></div> 
<div id="content4"><div class="nestedDiv">Content Here</div></div> 

J'ai essayé d'utiliser des exemples que je trouve ici: How do you swap DIVs on mouseover? (jquery?) mais il échoue à cause des divs imbriqués.

Des idées sur la façon dont je peux faire en sorte que tout le contenu d'un div donné, y compris d'autres divs, soit affiché en cliquant? Je voudrais aussi garder le premier div dans un état actif quand la page est ouverte pour la première fois ... changer l'apparence active du li qui est sélectionné ... mais je n'ai pas encore essayé d'y remédier.

Toute contribution est appréciée. Merci!

Merci!

+1

Vous devez afficher le code que vous avez utilisé pour essayer de masquer/afficher le contenu, car il ne sait pas ce que les appels ou les sélecteurs que vous utilisez. – casperOne

Répondre

7

Ajouter une class = « contenu » sur chaque contenu div

<style type="text/css"> 
.content 
{ 
    display: none; 
} 
</style> 

<script type="text/javascript"> 

$(document).ready(function() { 

    $("#tab a").click(function() { 

     //reset 
     $(".content").hide(); 
     $("#tab .active").removeClass("active"); 

     //act 
     $(this).addClass("active") 
     var id = $(this).closest("li").attr("id").replace("tab",""); 
     $("#content" + id).show(); 
    }); 

}); 
</script> 
+0

Cela fonctionne très bien, merci beaucoup! Un conseil sur la façon dont je peux garder le premier contenu ouvert quand la page se charge d'abord? – Peachy

+0

oups, j'ai oublié celui-là. Ajoutez ceci sous la partie $ (document) .ready: var activeId = $ (". Active"). Attr ("id"). Replace ("tab", ""); $ ("# content" + activeId) .show(); –

+0

Oui, ça fonctionne comme un charme. Merci beaucoup pour votre aide. – Peachy

Questions connexes