2010-03-29 38 views
0

Je veux savoir comment écrire correctement une instruction if avec jquery. J'ai un tas de div avec une ancre dans chacun d'eux qui, lorsqu'on clique dessus, étend la largeur de la div en utilisant toggleClass. Cela fonctionne bien mais je veux écrire une instruction if qui vérifie si les autres div ont la même classe appliquée, si donc contracte ce div, puis développe le div suivant (espoir qui a du sens), mon code jusqu'à présent:Jquery if instruction help

HTML:

<div class="content-block"> 
    <h2>Title</h2> 
    <p>Content...</p> 
    <a class="expand" href="#">Expand View</a> 
</div> 
<div class="content-block"> 
    <h2>Title</h2> 
    <p>Content...</p> 
    <a class="expand" href="#">Expand View</a> 
</div> 
<div class="content-block"> 
    <h2>Title</h2> 
    <p>Content...</p> 
    <a class="expand" href="#">Expand View</a> 
</div> 
<div class="content-block"> 
    <h2>Title</h2> 
    <p>Content...</p> 
    <a class="expand" href="#">Expand View</a> 
</div> 

JQUERY:

$(document).ready(function(){ 
$('a.expand').click(function(){ 
    $(this).parent('.content-block').toggleClass('wide'); 
}); 

});

Répondre

3

Vous pouvez le faire comme ça, pas besoin d'un si dans ce cas:

$(document).ready(function(){ 
    $('a.expand').click(function(){   
    $(this).parent('.content-block').toggleClass('wide') 
      .siblings('.wide').removeClass('wide'); 
    }); 
}); 

Vous alternez la grande classe sur le parent , puis supprime la classe de tous ses frères et soeurs.

+0

@ Nick merci beaucoup pour l'aide que j'apprécie – mtwallet

0

Vous voulez écrire quelque chose comme ceci:

var otherExpanded = $('.content-block.wide'); 
if (otherExpanded.length) 
    //Do things 
1

Pas besoin d'une instruction if, il suffit d'exécuter removeClass() sur tout ce qui a la wide classe qui lui est appliquée:

$(document).ready(function(){ 
    $('a.expand').click(function(){ 
     $('.content-block.wide').removeClass('wide'); 
     $(this).parent('.content-block').addClass('wide'); 
    }); 
}); 

Et pour l'amour de la performance, il suffit d'utiliser addClass() et removeClass() au lieu de toggleClass()

+0

Cela n'aurait pas le même comportement, actuellement son code réduit le div actuel 'wide' quand on clique, ceci enlève cette capacité. –

+0

@Nick, je crains de ne pas voir de quoi vous parlez. Mon code trouve d'abord le div 'wide' actuel, il en supprime la classe' wide'. Ensuite, il ajoute la classe 'wide' à la div' wide' maintenant en cours. S'il vous plaît laissez-moi savoir si je me méprends. –

+0

Si vous avez cliqué sur la div en cours et qu'elle a '.wide',' toggleClass() 'la supprime ... puisque vous la supprimez de tout, alors vous faites le parent' .wide' à chaque fois, aucune possibilité de l'effondrer. Ce n'est pas ce que le PO avait, vous supprimez la capacité d'effondrement en prenant cette route. –