jQuery outerHeight没有返回正确的值

时间:2013-03-18 15:07:37

标签: javascript jquery html dynamic

我试图通过从窗口大小中减去页眉和页脚值并在文档加载时将内容设置为此值来动态设置网页内容的高度。

每个函数参数都采用元素id来获取元素高度;排除内容参数。

 function setH(header, content, footer) 
{
    winH = top.innerHeight;
    winTitle = 32; // height value of the window title (part of the header)
    headH = $(header).outerHeight(true);
    footH = $(footer).outerHeight(true);
    contentH = winH - winTitle - headH - footH;
    $(content).css({'height' : (contentH) + 'px','overflow-y' : 'scroll'});
}

我遇到的问题是outerHeight值返回错误的值。标题返回23px和页脚40px。

检查FF和Chrome中的元素时,值为25px和44px。

我尝试过使用innerHeight,outerHeight和outerHeight(true)但没有得到正确的值。

有关可能出现的问题的任何建议?或动态设置内容高度的另一种方法?我已经没有头发了,所以任何帮助都会受到赞赏。

编辑:我正在处理iframe中的内容。以下内容:winH = top.innerHeight获取最顶层iframe窗口的高度值。

2 个答案:

答案 0 :(得分:15)

尝试帮助我的一件事是将检查outerHeight()的代码放在$(window).load()而不是$(document).ready()。显然在很多情况下使用$(document.ready()都很好,但有时outerHeight()的错误值是由于元素未完全加载造成的。

答案 1 :(得分:1)

我修改了一个用于计算屏幕宽度/高度的脚本。看看是否有效:

    if (typeof window.innerWidth != 'undefined') {
        viewportwidth = window.innerWidth;
        viewportheight = window.innerHeight;
        winTitle = 32;
        headH = $(header).outerHeight(true);
        footH = $(footer).outerHeight(true);
        contentH = viewportheight - winTitle - headH - footH;
    }

    // IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)

    else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0) {
        viewportwidth = document.documentElement.clientWidth;
        viewportheight = document.documentElement.clientHeight;
        winTitle = 32;
        headH = $(header).outerHeight(true);
        footH = $(footer).outerHeight(true);
        contentH = viewportheight - winTitle - headH - footH;
    }

    // older versions of IE

    else {

    viewportwidth = document.getElementsByTagName('body')[0].clientWidth;
    viewportheight = document.getElementsByTagName('body')[0].clientHeight;
    }
    document.getElementById("content id").style.height = contentH + "px";