2010-01-15 7 views
2

Je vais avoir un blog ExpressionEngine qui placera les blocs de contenu conçus par l'utilisateur dans le pied de page. Mais, ça va seulement en montrer un à la fois.Problème avec afficher/masquer JavaScript

Mon HTML ressemble à ceci:

<ul class="footernav"> 
    <li class="first"><a class="active" href="#">Get in touch</a></li> 
    <li><a href="#">Interested in joining?</a></li> 
    <li><a href="#">Feedback</a></li> 
    <li><a href="#">Link 4</a></li> 
</ul> 
<div class="copy gutters show"> 
    <p>Lorem Ipsum</p> 
</div> 
<div class="copy gutters hide"> 
    <p>Lorem Ipsum</p> 
</div> 
<div class="copy gutters hide"> 
    <p>Lorem Ipsum</p> 
</div> 

Je veux changer la classe d'exposition à une classe de peau en fonction du lien cliqué. Je ne sais pas comment je peux accomplir cela. Il doit être suffisamment flexible pour fonctionner avec N nombre de blocs de contenu - car ils seront définis par l'utilisateur dans ExpressionEngine. Je ne suis pas nouveau en JavaScript, donc j'apprécierais vraiment tout aperçu, ou une solution pour la façon dont je pourrais accomplir cela.

Répondre

3

Je pense que cela fonctionnerait avec votre structure:

// Cycle through each link in our ul.footernav element 
$(".footernav a").each(function(i,o){ 
    // Attach click-logic to each link 
    $(this).click(function(e){ 
    // Prevent page from bouncing, reloading, etc. 
    e.preventDefault(); 
    // Add .active class to this, but remove from all other links 
    $(this).addClass("active").closest("li").siblings("li").find("a").removeClass("active"); 
    // Show any DIV having class .copy and same index as clicked link 
    // meaning, clicking the second link will show the second div 
    $("div.copy:eq("+i+")").show().siblings("div.copy").hide(); 
    }); 
}); 

Démo en ligne: http://jsbin.com/ekecu

+0

Merci pour l'aide! Cela ne fonctionne pas encore, mais je commence à le voir. N'y a-t-il pas besoin d'une sorte d'identifiant spécifique pour dire quel lien doit montrer quel bloc de contenu? Toute solution pour comment je pourrais faire ça? –

+0

inconnu, l'identifiant est l'ordre dans lequel les liens apparaissent. Le premier lien bascule le premier div. Le deuxième lien va basculer la deuxième div, etc Cela fonctionne - vérifiez la "démo en ligne" au bas de la solution. – Sampson

+0

Hmm. Tout à fait correct, il semble fonctionner exactement comme nécessaire sur votre exemple JsBin. Cependant l'extrait exact que vous utilisez avec succès là-bas, fonctionne bizarrement quand je l'implémente (c'est une installation EE locale, ou je la lierais). Il semble ne fonctionner que sur le dernier lien de la liste. Dans le cas de notre exemple, Lien 4. Une fois que le dernier lien a été activé, celui qui le précède immédiatement active le premier bloc de contenu. Des pensées? –