Wie erhält man die gerenderte Höhe eines Elements?
Angenommen, Sie haben ein <div>
Element mit Inhalten. Dieser Inhalt im Inneren wird die Höhe des <div>
. Wie erhalten Sie die "gerenderte" Höhe, wenn Sie die Höhe nicht explizit festgelegt haben? Offensichtlich habe ich versucht:
var h = document.getElementById('someDiv').style.height;
Gibt es dafür einen Trick? Ich benutze jQuery, wenn das hilft.
javascript
jquery
css
height
BuddyJoe
quelle
quelle
Antworten:
Es sollte einfach so sein
mit jQuery. Dadurch wird die Höhe des ersten Elements im verpackten Satz als Zahl abgerufen.
Ich versuche zu benutzen
funktioniert nur, wenn Sie die Eigenschaft zuerst festgelegt haben. Nicht sehr nützlich!
quelle
Versuchen Sie eines von:
clientHeight
beinhaltet die Höhe und vertikale Polsterung.offsetHeight
Enthält die Höhe, die vertikale Polsterung und die vertikalen Ränder.scrollHeight
Enthält die Höhe des enthaltenen Dokuments (wäre beim Scrollen größer als nur die Höhe), den vertikalen Abstand und die vertikalen Ränder.quelle
.clientWidth/.clientHeight
die Bildlaufbreite NICHT ein, wenn ein Bildlauf angezeigt wird. Wenn Sie möchten, dass die Bildlaufbreite einbezogen wird, können Sieelement.getBoundingClientRect().width
stattdessenNON JQUERY, da
elem.style.height
oben in diesen Antworten eine Reihe von Links verwendet wurden ...INNERE HÖHE:
https://developer.mozilla.org/en-US/docs/Web/API/Element.clientHeight
AUSSENHÖHE:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.offsetHeight
Oder eine meiner Lieblingsreferenzen: http://youmightnotneedjquery.com/
quelle
Sie können
.outerHeight()
für diesen Zweck verwenden.Sie erhalten die volle gerenderte Höhe des Elements. Außerdem müssen Sie kein
css-height
Element festlegen . Vorsichtshalber können Sie die Höhe automatisch beibehalten, damit sie gemäß der Höhe des Inhalts gerendert werden kann.Um einen klaren Überblick über diese Funktionen zu erhalten, können Sie hier die Website von jQuery oder einen ausführlichen Beitrag aufrufen .
es wird den Unterschied zwischen
.height()
/innerHeight()
/outerHeight()
quelle
Ich benutze dies, um die Höhe eines Elements zu erhalten (gibt float zurück) :
Dies funktioniert auch, wenn Sie das virtuelle DOM verwenden . Ich benutze es in Vue so:
quelle
dann einfach:
style.height
quelle
Auf jeden Fall verwenden
oder
Ich poste dies als zusätzliche Antwort, weil es ein paar wichtige Dinge gibt, die ich gerade gelernt habe.
Ich bin gerade fast in die Falle geraten, OffsetHeight zu verwenden. Das ist, was passiert ist :
Hier ist nur ein Teil davon:
Ja, es sieht BEIDE Bildlauf und Versatz. Wenn dies fehlschlägt, sieht es unter Berücksichtigung von Browser- und CSS-Kompatibilitätsproblemen noch weiter aus. Mit anderen Worten, ich kümmere mich nicht darum - oder möchte es.
Aber ich muss nicht. Danke jQuery!
Moral der Geschichte: Wenn jQuery eine Methode für etwas hat, hat dies wahrscheinlich einen guten Grund, der wahrscheinlich mit der Kompatibilität zusammenhängt.
Wenn Sie die jQuery-Liste der Methoden in letzter Zeit nicht gelesen haben, empfehlen wir Ihnen, einen Blick darauf zu werfen.
quelle
quelle
elem.getBoundingClientRect().height
Ich habe einen einfachen Code erstellt, der nicht einmal JQuery benötigt und wahrscheinlich einigen Leuten helfen wird. Nach dem Laden wird die Gesamthöhe von 'ID1' ermittelt und für 'ID2' verwendet.
Stellen Sie dann einfach den Körper so ein, dass er geladen wird
quelle
Hm wir können die Elementgeometrie bekommen ...
Wie wäre es mit diesem einfachen JS?
quelle
var geometry; geometry={};
kann einfach seinvar geometry={};
Ich denke, der beste Weg, dies im Jahr 2020 zu tun, ist die Verwendung von einfachen js und
getBoundingClientRect().height;
Hier ist ein Beispiel
Hinzu kommt immer auf
height
diese Weise haben wir auch Zugriff auf ein paar andere Sachen über diediv
.quelle
Also ist das die Antwort?
"Wenn Sie etwas berechnen müssen, es aber nicht anzeigen müssen , setzen Sie das Element auf
visibility:hidden
undposition:absolute
, fügen Sie es dem DOM-Baum hinzu, rufen Sie die offsetHeight ab und entfernen Sie es.Ich habe das gleiche Problem bei einer Reihe von Elementen. Es gibt keine jQuery oder Prototype, die auf der Site verwendet werden können, aber ich bin alle dafür, die Technik auszuleihen, wenn sie funktioniert. Als Beispiel für einige Dinge, die nicht funktionierten, gefolgt von dem, was getan hat, habe ich den folgenden Code:
Das versucht im Grunde alles und jedes, nur um ein Null-Ergebnis zu erhalten. ClientHeight ohne Auswirkungen. Mit den Problemelementen erhalte ich normalerweise NaN in der Basis und Null in den Versatz- und Bildlaufhöhen. Ich habe dann die Add DOM-Lösung und clientRects ausprobiert, um zu sehen, ob es hier funktioniert.
Am 29. Juni 2011 habe ich den Code tatsächlich aktualisiert, um zu versuchen, sowohl DOM als auch clientHeight mit besseren Ergebnissen als erwartet hinzuzufügen.
1) clientHeight war ebenfalls 0.
2) Dom hat mir tatsächlich eine Größe gegeben, die großartig war.
3) ClientRects gibt ein Ergebnis zurück, das fast identisch mit der DOM-Technik ist.
Da die hinzugefügten Elemente flüssiger Natur sind, werden sie beim Hinzufügen zu einem ansonsten leeren DOM Temp-Element entsprechend der Breite dieses Containers gerendert. Das wird komisch, weil das 30px kürzer ist, als es letztendlich endet.
Ich habe ein paar Schnappschüsse hinzugefügt, um zu veranschaulichen, wie die Höhe unterschiedlich berechnet wird.
Die Höhenunterschiede sind offensichtlich. Ich könnte sicherlich absolute Positionierung und versteckt hinzufügen, aber ich bin sicher, dass das keine Wirkung haben wird. Ich war weiterhin davon überzeugt, dass dies nicht funktionieren würde!
(Ich schweife weiter ab) Die Höhe ist niedriger als die tatsächlich gerenderte Höhe. Dies könnte durch Einstellen der Breite des DOM Temp-Elements auf das vorhandene übergeordnete Element behoben werden und könnte theoretisch ziemlich genau erfolgen. Ich weiß auch nicht, was sich daraus ergeben würde, sie zu entfernen und wieder an ihrem vorhandenen Standort hinzuzufügen. Da sie durch eine innerHTML-Technik angekommen sind, werde ich diesen anderen Ansatz verwenden.
* JEDOCH * Nichts davon war notwendig. Tatsächlich funktionierte es wie angegeben und gab die richtige Höhe zurück !!!
Als ich in der Lage war, die Menüs wieder sichtbar zu machen, hatte DOM erstaunlicherweise die richtige Höhe gemäß dem Fluid-Layout oben auf der Seite (279 Pixel) zurückgegeben. Der obige Code verwendet auch getClientRects, die 280px zurückgeben.
Dies wird im folgenden Schnappschuss veranschaulicht (aus Chrome entnommen, sobald es funktioniert hat).
Jetzt habe ich keine Ahnung, warum dieser Prototyp-Trick funktioniert, aber es scheint so. Alternativ funktioniert getClientRects auch.
Ich vermute, die Ursache für all diese Probleme mit diesen bestimmten Elementen war die Verwendung von innerHTML anstelle von appendChild, aber das ist an dieser Stelle reine Spekulation.
quelle
offsetHeight
, gewöhnlich.Wenn Sie etwas berechnen, aber nicht anzeigen müssen, setzen Sie das Element auf
visibility:hidden
undposition:absolute
, fügen Sie es dem DOM-Baum hinzu , rufen Sie das aboffsetHeight
und entfernen Sie es. (Das macht die Prototypenbibliothek hinter den Kulissen, als ich das letzte Mal nachgesehen habe).quelle
Manchmal gibt offsetHeight Null zurück, weil das von Ihnen erstellte Element noch nicht im Dom gerendert wurde. Ich habe diese Funktion für solche Umstände geschrieben:
quelle
Wenn Sie jQuery bereits verwenden, ist
.outerHeight()
oder.height()
, wie bereits erwähnt, die beste Wahl .Ohne jQuery können Sie die verwendete Boxgröße aktivieren und verschiedene Auffüllungen + Rahmen + clientHeight addieren, oder Sie können getComputedStyle verwenden :
var h = getComputedStyle (document.getElementById ('someDiv')). height;
h
wird nun eine Zeichenfolge wie "53.825px" sein.Und ich kann die Referenz nicht finden, aber ich denke, ich habe gehört
getComputedStyle()
, dass sie teuer sein kann. Daher möchten Sie sie wahrscheinlich nicht bei jedemwindow.onscroll
Ereignis anrufen (aber jQuery's auch nichtheight()
).quelle
getComputedStyle
, verwenden SieparseInt(h, 10)
, um eine Ganzzahl für Berechnungen zu erhalten.Mit MooTools :
$('someDiv').getSize().y
quelle
Wenn ich Ihre Frage richtig verstanden hätte, würde vielleicht so etwas helfen:
quelle
Haben Sie die Höhe im CSS speziell eingestellt? Wenn Sie nicht haben, müssen Sie
offsetHeight;
eher als verwendenheight
quelle