【问题标题】:Get children element height in separate div在单独的 div 中获取子元素高度
【发布时间】:2016-04-16 16:39:57
【问题描述】:

我想获取每个div的子元素,然后根据它们各自的子元素总高度设置每个div的高度。

我试图找到一个类似的问题,但找不到我想要的。我知道我需要一个 .each 函数,但我无法让它工作。

下面是我的代码:

HTML

<ul>
  <li>
    <div class="container">
      <h1>content</h1>
      <a href="#">content</a>
    </div>
  </li>
  <li>
    <div class="container">
      <h1>very long contents</h1>
      <p>content</p>
      <a href="#">content</a>
    </div>
  </li>
  <li>
    <div class="container">
      <h1>super uber ultra long contents</h1>
      <p>content</p>
      <a href="#">content</a>
    </div>
  </li>
</ul>

jQuery

$("ul li").each(function() {
        $("ul li div").each(function(){
            var div_ht = 0;
            $("ul li div").children().each(function() {
                div_ht += $(this).outerHeight(true);
            });
            $("ul li div").height(div_ht);
        });
    });

我想要实现的是假设第一个 div 的子元素的总高度是 100px,那么它将第一个 div 设置为 100px 高度。如果第二个div的子元素的总高度是300px,那么它会将第二个div设置为300px的高度。

【问题讨论】:

  • 如果我是正确的,您是在尝试获取每个 div 子元素的平均高度吗?
  • 嗨菲尔,感谢您的帮助,但我已经在 gurvinder 的帮助下解决了我的问题。我没有得到每个 div 子元素的平均高度。我实际上是想根据自己的子元素的高度来设置每个 div 的高度。

标签: javascript jquery


【解决方案1】:

试试

$("ul li").each(function() {
    $(this).find("div").each(function(){ //this line changed, iterating individual li's div rather than whole bunch
        var div_ht = 0;
        $(this).children().each(function() { //observe change in this line too
            div_ht += $(this).outerHeight(true);
        });
        $(this).height(div_ht); //observe change in this line too
    });
});

另外,如果你只是想将 div 的高度设置为他们孩子身高的总和,那么只需将那些div 的高度设置为auto

$("ul li div").css("height", "auto");

【讨论】:

  • 天啊!非常感谢!我已经尝试了 2 天,但仍然无法实现。我不能使用自动高度,因为我的 div 使用绝对位置,我需要让它显示在中间。所以关键是使用.find。不过,我有点困惑,使用 .find 和不使用它的区别。
【解决方案2】:

按照@gurvinder372 的回答,您不妨使用单个查询:

$("ul li div").each( function() {
  var divHeight = 0;
  $(this).children().each( function() {
    divHeight += $(this).height();
  });
  $(this).height(divHeight);
})

因为你想为每个 ul li div 元素做这项工作。 需要注意的是,在 each/function 语句中:

  • this 指向 HTML 元素(参见参考文档)
  • $(this) 指向从 HTML 元素构造的 JQuery 元素(从而为您提供 JQuery 库的所有灵活性)

编辑 函数find 从调用它的选择开始执行一个新的选择

对“ul li”元素从根开始进行选择,然后对每个元素进行子选择:

$("ul li").find("div");

ul li div 元素上执行从根开始的选择 => 这应该更有效,如果您不打算在ul li 级别上做任何工作,请使用它:

$("ul li div");

这相当于$("").find("ul li div");

【讨论】:

  • 感谢简化版!我确实使用了 $("ul li div").each(); 有点奇怪。之前的函数,但它返回了 3 个 div 中子元素的所有高度。但现在它工作得很好。 @.@
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 2021-06-16
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
相关资源
最近更新 更多