2010-01-24 12 views
2

HTML:largeur Calculer dynamiquement (jQuery)

<div class="parent"> 
    <div class="one"></div> 
    <div class="two"></div> 
    <div class="three"></div> 
</div> 

jQuery

parentWidth = $(".parent").outerWidth(true); 
oneWidth = $(".parent .one").outerWidth(true); 
twoWidth = $(".parent .two").outerWidth(true); 
$('.parent .three').width(parentWidth - oneWidth - twoWidth); 

Mais la chose est, que ce soit DIV .one ou .TWO peuvent ne pas exister quelques fois, comment puis-je modifier le jQuery pour ça?

Merci

Répondre

6

Vous pouvez vérifier si un élément existe en vérifiant sa propriété longueur:

parentWidth = $(".parent").outerWidth(true); 
oneWidth = $(".parent .one").length ? $(".parent .one").outerWidth(true):0; 
twoWidth = $(".parent .two").length ? $(".parent .two").outerWidth(true):0; 
$('.parent .three').width(parentWidth - oneWidth - twoWidth); 
+0

Parfait, merci tas! :) – 3zzy

+0

Vous êtes les bienvenus :) –

+1

-1 pour une approche non systématique et pour violation du principe DRY. –

4

Pourquoi ne pas vérifier que si le résultat de la fonction $ est vide? ;) De cette façon, vous pouvez facilement savoir si la div existe et simplement définir la largeur à 0 dans ce cas, par ex.

oneDiv = $(".parent .one"); 
oneWidth = oneDiv.length == 0 ? 0 : oneDiv.outerWidth(true); 
+3

'$ (sélecteur)' ne vous donnera 'null' . S'il n'y a pas d'élément correspondant, vous obtiendrez simplement un wrapper de liste vide. Vous auriez besoin de vérifier par exemple. '$ ('. parent .one'). longueur'. – bobince

+0

Merci d'avoir signalé cela, je vais y remédier. Je viens en fait du monde de Prototype où le $ vous donne zéro pour un élément inexistant. –

3

Essayez ce code:

var third = $('.parent .three'); 
var wantedWidth = third.parent().outerWidth(true); 

third.siblings().each(function(){ 
    wantedWidth -= $(this).outerWidth(true); 
}); 

third.width(wantedWidth);