Javascript clientHeight不一致

时间:2009-03-11 07:07:48

标签: javascript html css dom

在编写Javascript时,我从earlier得到了帮助的函数,它获取了隐藏元素的高度,有人将我引用到Prototype函数getDimensions()。在示例中,他们设置了“visibility:hidden; position:absolute; display:block;”,这有效地让我们可以测量clientHeight 在显示时 的内容。然后他们把它全部放回去,你可以开展你的业务。我没有使用原型,但我认为它工作正常。但是,当我试图在我自己的代码中模仿相同的函数时,使用“position:absolute;”扔掉了测量。没有它它可以正常工作,但它的使用使我们能够在不扭曲设计的情况下瞬间完成这项工作。我的版本在下面,任何想法为什么它不起作用?

    var objStyle = obj[objName].style;

    // Record original style values
    var visibility = objStyle.visibility;
    //var position = objStyle.position;
    var display = objStyle.display;

    // Modify object for measuring
    objStyle.visibility = "hidden";
    //objStyle.position = "absolute";
    objStyle.display = "block";

    // Measure height
    height = obj[objName].clientHeight;

    // Fix object
    objStyle.visibility = visibility;
    //objStyle.position = position;
    objStyle.display = display;

    // Return height
    return parseInt(height);

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

我不知道它是否在隐形时起作用,但jQuery在这里有一些选项 - 特别是height function;值得一看?根据您的示例,例如:

height = $(obj[objName]).height();

答案 1 :(得分:0)

您是仅在cetain浏览器上还是在所有浏览器上看到此内容? Prototype的getDimensions()检查Safari(可能还有其他有缺陷的浏览器),你应该尝试将它放在你的代码中,看看它是否解决了这个问题。

这也可能是因为你使用obj [objName]而不是document.getElementById() - AFAIK这些将返回稍微不同的对象,这可能会导致你看到的不一致。

答案 2 :(得分:0)

我通常使用.offsetHeight测量我的高度,例如:

var h = document.getElementById(divname).offsetHeight;

当我需要测量某些东西时,如果它有位置:绝对值;

当我有两列时,我经常遇到这种情况,其中一列是绝对的,如果父级比另一级大,那么父级需要被绝对值推下来。如果它高于另一列的高度,我将使用offsetHeight来设置父高度。