使用jQuery计算div的子节点的高度

时间:2010-08-24 05:23:53

标签: jquery

我希望将父级的高度与其子级的总高度相匹配,因此内容不会从父级边框流出。我正在使用以下代码:

 $("#leftcolumn").each(function(){
     totalHeight=totalHeight+$(this).height();
  });

它会遍历所有div的孩子吗?有时候,它有时会起作用。

此外,我尝试使用代码,假设它会考虑所有的孩子。但结果很奇怪,并且从正确的结果中得到了两倍的高度。

 $("#leftcolumn > *").each(function(){
   totalHeight=totalHeight+$(this).height();
 });

提前致谢。

5 个答案:

答案 0 :(得分:46)

尝试如下:

var totalHeight = 0;

$("#leftcolumn").children().each(function(){
    totalHeight = totalHeight + $(this).outerHeight(true);
});

http://api.jquery.com/outerHeight/marginspaddingsborders带入计算中,该计算应返回更可靠的结果。

答案 1 :(得分:7)

另一种方法是计算元素中顶部和最底部偏移之间的距离,将考虑任何非静态定位元素

我只在一个页面和环境中对此进行了测试,所以我完全不确定使用它的安全性。如果代码非常糟糕或者是否值得一些改进,请发表评论。

var topOffset = bottomOffset = 0,
    outer = true;
$el.children().each(function(i, e){
    var $e = $(e),
        eTopOffset = $e.offset().top,
        eBottomOffset = eTopOffset + (outer ? $e.outerHeight() : $e.height());

    if (eTopOffset < topOffset) {
        topOffset = eTopOffset;
    }
    if (eBottomOffset > bottomOffset) {
        bottomOffset = eBottomOffset;
    }
});

var childrenHeight = bottomOffset - topOffset - $el.offset().top;

答案 2 :(得分:4)

如果您想忽略隐藏的元素,可以将其过滤掉:

$("#leftcolumn").children().filter(':visible').each(function(){
    totalHeight += $(this).outerHeight();
});

答案 3 :(得分:0)

这样怎么样。不要求你改变外部作用域中的变量,允许你重用sumHeights函数。

function sumHeights(height, element) {
    return height + $(element).outerHeight(true);
}

const outerHeight = $('#static-section')
    .children()
    .toArray()
    .reduce(sumHeights, 0);

答案 4 :(得分:-1)

 $('#leftColumn').children().each(function(){
    var Totalheight += $(this).Height();
})var parentHeight = $('#leftColumn').Height();
if(parentHeight===TotalHeight)
{//Do the nasty part}
else
{//Do the Good part}