2010-07-12 11 views
1

Je veux être en mesure de réutiliser la même fonction à plusieurs reprises sur une page ..écriture d'une simple mesure en savoir plus sur la fonction de clic pour jquery qui a besoin refactorisation

est donc ici une pseudo-code:

$(".read_more").click(function(){ 
$(this).parents().find(".hidden_text").slideToggle("fast") 
}); 

Le problème avec ce code, cependant, est qu'il cible chaque élément de la page correspondant à .hidden_text. Y at-il un moyen de combiner le plus proche() avec cela? Ou y a-t-il une meilleure façon de refactoriser cela?

Mise à jour:

HTML:

<div class="grid_2"> 
    <div class="read_more"> 
    Click Me 
    </div> 
</div> 

<div class="grid_2"> 
    <div id=".hidden_text"> 
    Bagels are the most resourceful tools to the most legendary programmers. 
    </div> 
</div> 
+0

Qu'est-ce que l'apparence HTML pertinent comme? Quels éléments ".hidden_text" voulez-vous ** affecter **? – Pointy

Répondre

2

Je pense

$(this).closest("*:has(.hidden_text)").find(".hidden_text").slideToggle("fast"); 

fonctionnera.

+0

Je creuse vraiment le joker. – Trip

1

si le contenu caché est au même niveau que votre lien En savoir plus, à savoir:

<div> 
    blbalbblal allalfdk 
    <a class="readmore">read more</a> 
    <div class="hidden-text" style="display:none">other bla bla bla</div> 
</div> 

Ensuite, vous pouvez utiliser la next sélecteur

$(".readmore").click(function(){ 
     $(this).next(".hidden_text").slideToggle("fast") 
    }); 
+0

Vous pouvez ajuster votre sélecteur dans votre js. '$ (". readmore ")' ou changez votre html en 'class =" read_more "' pour que vos exemples correspondent. :) – TyMayn

+0

@TyMayn En effet. Il est corrigé – Gregoire

1

Vous voulez ajouter 'return false' pour arrêter de sauter

$(".read_more").click(function(){ 
    $(this).next(".hidden_text").slideToggle("fast"); 
    return false; 
}); 

Et évidemment ajouter à css

.hidden_text { 
    display:none 
}