有些文件我不能得到文件的高度(位置绝对在最底部)。此外,填充底部似乎在这些页面上不起任何作用,但在高度将返回的页面上起作用。相关案例:

http://fandango.com http://paperbackswap.com

在胡闹 jQuery的$(文档).height ();返回正确的值 文档。Height返回0 document.body.scrollHeight返回0

关于平装书互换: jQuery的$(文档).height ();TypeError: $(document)为空 文档。Height返回不正确的值 scrollheight返回错误的值

注意:我有浏览器级别的权限,如果有一些技巧在那里。


当前回答

文档大小是浏览器兼容性的噩梦,因为尽管所有浏览器都公开了clientHeight和scrollHeight属性,但它们并不都同意如何计算这些值。

关于如何测试正确的高度/宽度,曾经有一个复杂的最佳实践公式。这涉及到文档的使用。documentElement属性(如果可用)或返回到文档属性,等等。

获得正确高度的最简单方法是获取document或documentElement中找到的所有高度值,并使用最高的一个。这就是jQuery的基本功能:

var body = document.body,
    html = document.documentElement;

var height = Math.max( body.scrollHeight, body.offsetHeight, 
                       html.clientHeight, html.scrollHeight, html.offsetHeight );

使用Firebug + jQuery bookmarklet进行快速测试,可以返回两个被引用页面的正确高度,代码示例也是如此。

注意,在文档准备好之前测试文档的高度总是会得到0。另外,如果你加载了更多的东西,或者用户调整了窗口的大小,你可能需要重新测试。如果您需要在加载时使用onload或文档就绪事件,否则只需在需要该数字时进行测试。

其他回答

全文高度计算:

为了更通用,找到任何文档的高度,你可以通过简单的递归找到当前页面上最高的DOM节点:

;(function() {
    var pageHeight = 0;

    function findHighestNode(nodesList) {
        for (var i = nodesList.length - 1; i >= 0; i--) {
            if (nodesList[i].scrollHeight && nodesList[i].clientHeight) {
                var elHeight = Math.max(nodesList[i].scrollHeight, nodesList[i].clientHeight);
                pageHeight = Math.max(elHeight, pageHeight);
            }
            if (nodesList[i].childNodes.length) findHighestNode(nodesList[i].childNodes);
        }
    }

    findHighestNode(document.documentElement.childNodes);

    // The entire page height is found
    console.log('Page height is', pageHeight);
})();

你可以把这个脚本粘贴到DevTools控制台,在你的示例站点(http://fandango.com/或http://paperbackswap.com/)上测试它。

注意:它与Iframes一起工作。

享受吧!

要以跨浏览器/设备的方式获取宽度,请使用:

function getActualWidth() {
    var actualWidth = window.innerWidth ||
                      document.documentElement.clientWidth ||
                      document.body.clientWidth ||
                      document.body.offsetWidth;

    return actualWidth;
}

这是一个非常老的问题,因此,有许多过时的答案。截至2020年,所有主要浏览器都遵守了该标准。

2020年的答案:

document.body.scrollHeight

编辑:上面没有把<body>标签的边距考虑在内。如果你的身体有边缘,使用:

document.documentElement.scrollHeight

我不知道如何确定高度,但你可以用这个在底部放一些东西:

<html>
<head>
<title>CSS bottom test</title>
<style>
.bottom {
  position: absolute;
  bottom: 1em;
  left: 1em;
}
</style>
</head>

<body>

<p>regular body stuff.</p>

<div class='bottom'>on the bottom</div>

</body>
</html>

我撒谎了,jQuery为两个页面返回正确的值$(document).height();…我为什么要怀疑它呢?