2010-06-08 18 views
1

J'essaie d'être en mesure d'étendre/réduire dynamiquement plusieurs divs avec le même code ....Essayer d'étendre dynamiquement différentes divs avec une fonction

il est contrôlé avec le clic d'une travée (bascule) et alors je suis en train d'obtenir le prochain id (div qui glisser vers le haut et vers le bas)

  $('span').toggle(
    function() { 
$('#albumholder').slideToggle(600); 
    $(this).html('-');}, 
    function() { 
$('#albumholder').slideToggle(600); 
    $(this).html('+');} 

    ); 

Ce code fonctionne à 1 div ... élargir mais suppose que j'ai un divs

#downloadholder
#linksholder
etc...
Comment puis-je obtenir la même effet avec le même code? Merci!

EDIT

Il convient de noter que je dois chaque div pour basculer de façon indépendante. Si je clique sur le bouton plus sur la durée qui touche #albumholder, il ne devrait pas étendre #downloadholder ou #linksholder

Répondre

5

Deux façons -

les ajouter dans le sélecteur

$('#downloadholder, #linksholder') 

ou ajouter une classe à ces articles

$('.toExpand') 

<div id="downloadholder" class="toExpand" /> 
<div id="linksholder" class="toExpand" /> 

Relecture votre question, il est peut-être que vous voulez obtenir le next div?

$('#yourSpanElement').click(function() { 
    $span = $(this); 
    $yourDiv = $span.next('div'); 
    // do your magic :) 
}); 

votre code peau neuve:

$('span').toggle(
    function() { 
     var $span = $(this); 
     $span.next('div').slideToggle(600); 
     $span.html('-'); 
    },  
    function() { 
     var $span = $(this); 
     $span.next('div').slideToggle(600); 
     $span.html('+'); 
    } 
); 

vous pouvez également vérifier l'apparence suivante divs:

$('span').click(function() { 
    var $span = $(this); 
    var $nextDiv = $span.next('div'); 
    if($nextDiv.is(':visible')) { 
    $nextDiv.slideUp(600); 
    $span.html('+'); 
    }else { 
    $nextDiv.slideDown(600); 
    $span.html('-'); 
    } 
}); 
+0

cela fonctionne, mais il est ... EFFECTUER deux divs si je clique soit, ils ont tous deux ... bascule je dois obtenir chacun pour travailler de façon indépendante. merci pour votre aide jusqu'à présent –

+0

Mis à jour la réponse que vous étiez en train de commenter - quelque chose comme ça? vous voulez la prochaine div après la durée? –

+0

ouais, je voudrais dire d'accord ... j'ai cette classe d'envergure si je clique dessus, je veux qu'elle développe la div NEXT, parce que dans tous les cas, la div que je veux développer sera directement après –

0

vous Faire htmlr quelque chose comme ça.

<span toggletarget="downloadholder>+</span> 
<div id="downloadholder"></div> 

puis faites votre javascript

$('span[toggletarget]').click(function() {$(this).toggle(
function() { 
    $("#"+$(this).attr("toggletarget")).slideToggle(600); 
    $(this).html('-');}, 
function() { 
$('#albumholder').slideToggle(600); 
$(this).html('+');} 
);}); 
+0

Vous pourriez faire les dieux w3c contrariés avec cela ... –

+0

Cela peut être mais, vis em ':) Je préférais avoir w3c en colère contre moi plutôt que de rendre mon code moins lisible. J'invente mes propres attributs car il est plus facile de gérer à partir du site serveur de cette façon. Si tout mon javascript est basé sur des données postées sur le html, je peux rapidement et facilement prépopuler à partir des données du serveur. –