2012-02-02 31 views
11

Próbowałem uzyskać listę wartości wysokości elementu, ale powracał 0.
Zrobiłem kilka badań i zobaczyłem, że aby uzyskać wysokość elementu, ten element musi być widoczny.
Ale chcę sprawdzić jego wysokość, gdy jest ukryta. Jeśli jego wysokość jest większa od pewnej wartości, użyj niektórych funkcji, a następnie spraw, aby były widoczne. Czy jest jakiś sposób to zrobić?Jquery uzyskiwanie ukrytej wysokości elementu

Znaczy: wysokość

  1. wyboru Ukrycie elementu.
  2. Jeśli ma wartość OK, spraw, aby był widoczny.
  3. Jeśli nie ma wymaganej wartości, wykonaj niektóre funkcje.
  4. Spraw, aby był widoczny.
+2

dokładną kopią http://stackoverflow.com/questions/2345784/ jquery-get-height-of-hidden-element-in-jquery-1-4-2 – samccone

+2

działa z ukrytymi elementami - http://jsfiddle.net/xgbEv/ –

+0

@ken redler: to najlepsze rozwiązanie, jakie znalazłem o tym. musiałem po prostu użyć .appendTo ("body"), ponieważ nie działało z .show() – Guntram

Odpowiedz

17

Można show element uzyskać wysokość, a następnie ukryć je, wizualnie nie zobaczysz żadnej różnicy.

var height = $('elementSelector').show().height(); 
$('elementSelector').hide(); 
if(height != <<HeightToCompare>>){ 
    //Code here 
} 
//Finally make it visible 
$('elementSelector').show(); 

Demo

+0

To prawdopodobnie będzie migotać. – AlienWebguy

+1

Nie, nie migocze. Spójrz na http://jsfiddle.net/PdEbM/ – ShankarSangoli

+0

Próbowałem pokazać element, a jego ukrycie spowoduje pewne problemy wizualne, ale testuję je teraz. Tak, to nie sprawia żadnego problemu. Dzięki za pomoc. – Malixxl

6

Jednym ze sposobów jest sklonowanie obiektu, położenie klonu daleko poza rzutnią, uczynienie go widocznym, zmierzenie klona, ​​a następnie jego zniszczenie.

Więc trzeba:

<div id="maybe" style="display: none;"> 
    Something 
</div> 

Ponieważ używasz jQuery, można zrobić coś takiego:

$('#maybe') 
    .clone() 
    .attr('id','maybe_clone') // prevent id collision 
    .css({     // position far outside viewport 
    'position': 'absolute', 
    'left': '-1000px' 
    }); 

if($('#maybe_clone').show().height() > 200) { 
    $('#maybe').show(); 
} 

$('#maybe_clone').remove();  // housekeeping 
+0

+1, które lub tymczasowo pozycjonować absolutnie i przenieść sam element. Ponieważ element jest ukryty, nie zakłóci to znaczników. –

+0

Jeśli '' display: none' zostanie zastosowany do elementu nadrzędnego, to nie zadziała. Naprawą byłoby wstrzykiwanie klonu poza jego pierwotnym rodzicem: '.clone(). AppendTo ('body')'. –

+0

dzięki, daj mi wskazówkę, aby obliczyć ukrytą wysokość div –

Powiązane problemy