2012-02-15 15 views
35

Ho un contenitore (thetext1) con un'altezza impostata di 360 px. "thetext1" contiene due div - uno a sinistra e uno flottato a destra - in entrambi i contenuti vengono consegnati tramite una chiamata Ajax.jQuery height() restituisce 0 su un div visibile - perché?

Ci saranno momenti in cui il contenuto di una o più di queste div supera 360px e quindi voglio aumentare di conseguenza l'altezza di thetext1.

Il mio codice di prova

newhgt = $('#thetext1').find('div.rhs').css("background", "pink").height(); 

ritorna 0 - (il mio selettore è corretto come il div mirato è perfettamente rosa!).

Perché è questo? So - dalle risposte ai post precedenti su questo sito - che la soluzione è aggiungere un overflow: hidden thetext1, ma mi piacerebbe capire perché il mio tentativo di ottenere l'altezza del rhs e del ls div non sta andando a buon fine.

+1

Se gli elementi che si sono galleggiare possono è necessario contenerli impostando l'overflow: nascosto sul riquadro di delimitazione o sul clearing float nell'elemento successivo – Alex

+1

Gli elementi contenuti sono entrambi a virgola mobile (sinistra e destra)? Probabilmente dovrai cancellare il floating sul container in modo che contenga effettivamente i suoi figli. –

+1

Si dice che il contenuto viene consegnato tramite una chiamata Ajax. Stai leggendo l'altezza dopo la chiamata ajax? –

risposta

28

Assicurarsi che il codice si trova all'interno del $ .load (finestra) [non $ (document) .ready]

$(window).load(function() { 
    newhgt = $('#thetext1').find('div.rhs').css("background", "pink").height(); 
}); 
+0

Puoi per favore approfondire perché dovremmo usare window.load invece di document.ready in questo o in casi simili? Grazie! –

+1

Ad essere sincero, non sono sicuro al 100%. Ha funzionato comunque. La mia ipotesi è quel documento. Già è solo questo. Gli elementi dei documenti vengono scaricati e il DOM è 'pronto' mentre window.load indica che la finestra è stata caricata e le dimensioni sono state calcolate. – Gazzer

+1

@Gazzer.l'altezza mi stava restituendo 0 nei browser webkit come Opera e Chrome. Usando $ (window) .load (function() {}); ha funzionato per me Grazie – Muk

7

Ho avuto lo stesso problema e ho notato una cosa, il div deve essere visibile quando si chiama .height();

Ma, anche se il div è visibile, i genitori di questo div devono essere visibili. Quindi è necessario GARANZIA che i genitori div siano visibili (visualizzazione! = Nessuno)

scrivere un $('#div').parent().show(); farà un genitore visibile, potrebbe essere necessario anothers parent().show();

+0

Ho pensato che questo potrebbe essere il problema. Ma nel mio caso ho un riquadro di delimitazione con due immagini all'interno. Uno è piccolo, all'interno della scatola, ottiene quell'altezza. Ma l'altro supera il confine (il confine ha overflow nascosto). 0 altezza restituita su quello. La casella di delimitazione non viene visualizzata mentre si recuperano i dettagli. Quindi rende difficile credere che sarebbe questo. Tutte le altezze vengono correttamente afferrate in seguito, svolgendo altre funzioni. –

0
newhgt = $('#thetext1').find('div.rhs').css("background", "pink")[0].getBoundingClientRect().height;