2010-01-04 7 views
2

Je ne sais pas pourquoi cela ne fonctionne pas ...CSS/jquery si() effet css

J'ai plusieurs DIVs avec une classe de .rightColumnButton. Certains d'entre eux ont une hauteur de 30px:

.rightColumnButton{ 
height:30px; 
width:206px; 
margin-top:20px; 
} 

Je souhaite modifier la marge supérieure à 10px si elles ont une hauteur de 30px:

$(function(){ 

if($('.rightColumnButton').css("height") == "30"){ 
    $(this).animate({marginTop: "10px"}, 500); 


    }  
}); 

ne fonctionne pas pour moi.

Répondre

3

L'utilisation de css('height') renvoie également l'unité, qui est généralement «px». Donc, dans ce cas, vous comparez '30px' == '30'. Utilisez la méthode height() qui renvoie une valeur numérique et la compare à un nombre entier.

De même, vous ne spécifiez pas l'objet que vous souhaitez animer, car l'élément n'est pas porté dans la clause if. Utilisez la méthode each() sur l'élément pour créer une fermeture:

$(function(){ 
    $('.rightColumnButton').each(function() { 
     if($(this).height() == 30) { 
      $(this).animate({marginTop: "10px"}, 500); 
     }  
    }); 
}); 

EDIT

Au lieu d'écrire dans les commentaires, je pensais que je me préciser ici. Je suppose que votre but est d'animer tous les éléments qui ont une hauteur de 30px. Dans votre message original, vous avez eu ceci:

if($('.rightColumnButton').css("height") == "30"){ 

qui ne sélectionner tous les » .rightColumnButtons' Allright, mais lorsque vous utilisez l'appel css("height"), vous obtenez seulement la hauteur du premier élément. Si votre code avait fonctionné, il aurait animé tous les div seulement si le premier div avait eu une hauteur de 30px.

C'est là que la méthode each() est pratique. Il boucle chaque élément de la sélection et compare les hauteurs indépendamment les unes des autres et les anime si nécessaire.

+0

Merci pour l'info, votre info était sur place, mais j'ai plusieurs divs, et je pense que cela ne vérifie que le premier. Les trois premiers ont une hauteur de 110px, j'en ai besoin pour tous les vérifier. – Jared

+0

La méthode 'each' parcourt tous les éléments qui ont une classe 'rightColumnButton', donc elle les vérifie tous. –

+0

Merci! Juste besoin de supprimer le premier "if (" – Jared

0

Que pensez-vous de cela?

$(function(){ 
    if($('.rightColumnButton').css("height") == "30px"){ 
     $(this).animate({marginTop: "10px"}, 500); 
    }  
}); 

Si cela ne fonctionne pas, essayez de mettre une alerte pour le contenu:

$('.rightColumnButton').css("height") 

... et coller ici le résultat.

+0

Je vois une partie de mon problème. Les trois premiers Divs .rightColumnButton ont une hauteur de 110px, le reste a une hauteur de 30px. C'est seulement en vérifiant le premier, j'en ai besoin pour boucler. Merci pour la suggestion sur l'alerte, il renvoie 110px. – Jared

+0

Des suggestions sur l'exécution d'une boucle à travers tous les .rightColumnButton? – Jared

1

this n'est pas spécifié

$(function(){ 
    $('.rightColumnButton').each(function(){ 
     if($(this).css("height") == "30"){ 
      $(this).animate({marginTop: "10px"}, 500); 
     } 
    } 
    ); 
}); 
+1

devrait être 'each' au lieu de' foreach' :) –

+0

vrai, mon mauvais. fixé maintenant. – metrobalderas

1

la méthode css() retournera une chaîne avec des unités, dans votre cas '30px';

donc vous devez vérifier

$('.rightColumnButton').css("height") == "30px" 

ou utiliser la fonction hauteur():

$('.rightColumnButton').height() == 30 

Vous devez également définir this avant d'animer.

var col = $('.rightColumnButton'); 
if (col.height() == 30) { 
    col.animate({marginTop: "10px"}); 
} 
0

Je pense que le problème est que le $ (« rightColumnButton ») BAE ... retourne une collection de valeurs, et votre cas est comaring que à 30.

Essayez quelque chose comme ça à la place.:

$("rightColumnButton").each(function (i) { 
    if (this.height == 30) 
     $(this).animate({marginTop: "10px"}, 500); 
}