Bei einigen Dokumenten kann ich die Höhe des Dokuments nicht ermitteln (um etwas ganz unten zu positionieren). Darüber hinaus scheint ein Padding-Bottom-On auf diesen Seiten nichts zu bewirken, sondern auf den Seiten, auf denen die Höhe zurückkehren wird. Beispiel (e):
http://fandango.com
http://paperbackswap.com
Bei Fandango gibt
jQuery den $(document).height();
korrekten Wert
document.height
zurück. 0
document.body.scrollHeight
gibt 0 zurück
Beim Taschenbuchwechsel:
jQuery's $(document).height();
TypeError: $(document)
is null
document.height
gibt einen falschen Wert
document.body.scrollHeight
zurück. Gibt einen falschen Wert zurück
Hinweis: Ich habe Berechtigungen auf Browserebene, wenn es dort einen Trick gibt.
javascript
Nic
quelle
quelle
Antworten:
Dokumentgrößen sind ein Albtraum für die Browserkompatibilität, da alle Browser zwar die Eigenschaften clientHeight und scrollHeight offenlegen, sich jedoch nicht alle darauf einigen, wie die Werte berechnet werden.
Früher gab es eine komplexe Best-Practice-Formel dafür, wie Sie die richtige Höhe / Breite getestet haben. Dies beinhaltete die Verwendung von document.documentElement-Eigenschaften, falls verfügbar, oder das Zurückgreifen auf Dokumenteigenschaften und so weiter.
Der einfachste Weg, um die richtige Höhe zu erhalten, besteht darin, alle im Dokument oder documentElement gefundenen Höhenwerte abzurufen und den höchsten zu verwenden. Dies ist im Grunde das, was jQuery tut:
Ein schneller Test mit dem Firebug + jQuery-Lesezeichen gibt die korrekte Höhe für beide zitierten Seiten zurück, ebenso wie das Codebeispiel.
Beachten Sie, dass das Testen der Höhe des Dokuments, bevor das Dokument fertig ist, immer zu einer 0 führt. Wenn Sie mehr Material einladen oder der Benutzer die Fenstergröße ändert, müssen Sie möglicherweise erneut testen. Verwenden Sie
onload
oder ein dokumentbereites Ereignis, wenn Sie dies beim Laden benötigen. Andernfalls testen Sie einfach, wann immer Sie die Nummer benötigen.quelle
Dies ist eine wirklich alte Frage und hat daher viele veraltete Antworten. Ab 2020 haben sich alle gängigen Browser an den Standard gehalten .
Antwort für 2020:
Bearbeiten: Bei den obigen
<body>
Angaben werden die Ränder des Tags nicht berücksichtigt. Wenn Ihr Körper Ränder hat, verwenden Sie:quelle
document.documentElement.getBoundingClientRect()
funktioniert besser.<h1>
am Anfang des Elements befindet sich ein Element<body>
mit dem Standardrand. Es drückt das<body>
Element nach unten, ohne dass es erkannt werden kann.document.documentElement.scrollHeight
(nichtdocument.body,scrollHeight
) ist die genaueste Art, Dinge zu tun. Dies funktioniert sowohl mit Körperrändern als auch mit Materialrändern im Körper, die ihn nach unten drücken.Sie können dies sogar verwenden:
oder eher jQuery (da wie gesagt jQuery nicht lügt) :)
quelle
Vollständige Berechnung der Dokumenthöhe:
Um allgemeiner zu sein und die Höhe eines Dokuments zu ermitteln, können Sie mit einer einfachen Rekursion einfach den höchsten DOM-Knoten auf der aktuellen Seite finden:
Sie können es auf Ihren Beispielseiten ( http://fandango.com/ oder http://paperbackswap.com/ ) testen, indem Sie dieses Skript in eine DevTools-Konsole einfügen.
HINWEIS: Es funktioniert mit
Iframes
.Genießen!
quelle
Die "jQuery-Methode" zum Bestimmen der Dokumentgröße - alles abfragen, den höchsten Wert annehmen und auf das Beste hoffen - funktioniert in den meisten Fällen, jedoch nicht in allen .
Wenn Sie wirklich kugelsichere Ergebnisse für die Dokumentgröße benötigen, empfehlen wir Ihnen, mein Plugin jQuery.documentSize zu verwenden . Im Gegensatz zu den anderen Methoden testet und bewertet es das Browserverhalten beim Laden und fragt von da an die richtige Eigenschaft ab.
Der Einfluss dieses einmaligen Tests auf die Leistung ist minimal , und das Plugin liefert selbst in den seltsamsten Szenarien die richtigen Ergebnisse - nicht weil ich es sage, sondern weil eine massive, automatisch generierte Testsuite dies tatsächlich überprüft.
Da das Plugin in Vanilla Javascript geschrieben ist, können Sie es auch ohne jQuery verwenden .
quelle
Ich habe gelogen, jQuery gibt den korrekten Wert für beide Seiten zurück $ (document) .height (); ... warum habe ich jemals daran gezweifelt?
quelle
Die richtige Antwort für 2017 lautet:
document.documentElement.getBoundingClientRect().height
Im Gegensatz zu
document.body.scrollHeight
dieser Methode werden die Körperränder berücksichtigt. Es gibt auch einen Bruchhöhenwert an, der in einigen Fällen nützlich sein kannquelle
document.body.scrollHeight
die gesamte scrollbare Höhe aufgelistet wird, wie in der ursprünglichen Frage gestellt.html { height: 100% }
in CSS hat. Die API gibt also den Real korrekt zurück berechnete Höhe . Versuchen Sie, diesen Stil zu entfernen und Ränder hinzuzufügen,body
und Sie werden sehen, wo das Problem bei der Verwendung liegtdocument.body.scrollHeight
.<h1>
am Anfang des Elements befindet sich ein Element<body>
mit dem Standardrand. Es drückt das<body>
Element nach unten, ohne dass es erkannt werden kann.document.documentElement.scrollHeight
(nichtdocument.body,scrollHeight
) ist die genaueste Art, Dinge zu tun.documentElement.scrollHeight
gibt in diesem Fall einen falschen Wert an.documentElement.getBoundingClientRect().height
gibt die richtige. Überprüfen Sie dies aus: jsfiddle.net/fLpqjsxdgetBoundingClientRect().height
. Es wird abgelenkt, während 3 (drei) andere Methoden nicht abgelenkt werden. Einschließlich der, die Sie als minderwertig erwähnen. Und Sie bestehen darauf, indem Sie vorschlagen, 100% von der HTML-Höhe dieser Seite zu entfernen und Ränder hinzuzufügen. Was ist der Punkt ? Akzeptiere einfach, dassgetBoundingClientRect().height
das auch nicht kugelsicher ist.Um die Breite browser- / geräteübergreifend zu ermitteln, verwenden Sie:
quelle
Für alle, die Probleme beim Scrollen einer Seite bei Bedarf mithilfe der Funktionserkennung haben, habe ich diesen Hack entwickelt, um zu erkennen, welche Funktion in einem animierten Bildlauf verwendet werden soll.
Das Problem war beides
document.body.scrollTop
und wurdedocument.documentElement
immertrue
in allen Browsern zurückgegeben.Sie können jedoch nur ein Dokument mit dem einen oder anderen scrollen.
d.body.scrollTop
für Safari unddocument.documentElement
für alle anderen nach w3schools (siehe Beispiele)element.scrollTop
funktioniert in allen Browsern, nicht auf Dokumentebene.quelle
Verwenden Sie den Blow-Code für die Berechnung der Höhe + des Bildlaufs
quelle
Dieser Cross-Browser-Code unten wertet alle möglichen Höhen der Body- und HTML-Elemente aus und gibt das maximal gefundene zurück:
Ein Arbeitsbeispiel:
quelle
Ich weiß noch nicht, wie man die Höhe bestimmt, aber Sie können dies verwenden, um etwas auf den Boden zu legen:
quelle
Fügen Sie Referenzen richtig hinzu
In meinem Fall habe ich eine ASCX-Seite verwendet und die Aspx-Seite, die das ASCX-Steuerelement enthält, verwendet die Referenzen nicht richtig. Ich habe gerade den folgenden Code eingefügt und es hat funktioniert:
quelle