Javascript JQuery获取子元素的最高高度并放入父元素

Javascript JQuery获取子元素的最高高度并放入父元素,javascript,jquery,math,jquery-plugins,Javascript,Jquery,Math,Jquery Plugins,在a中,我在页面上的UL组中的各个标记上设置了相同的高度。但现在我意识到,为了更好地设置主题,我想在UL组中的一组标签上设置最高的高度,并将其设置为其各自的父级本身,以便更好地设置我的页面主题。在这里,我试图找到UL组中的最高高度,并将其设置为UL 问题仍然是具体性。第一个UL组的最高高度被设置为页面上的所有标签。UL组(第1行)中最高的的高度为260px,第2行的高度为156px。然而,260px仍然被设置为页面上的两个UL标签。ULs将在页面上增长,因此我希望代码可以扩展,而不必指定JQue

在a中,我在页面上的UL组中的各个
  • 标记上设置了相同的高度。但现在我意识到,为了更好地设置主题,我想在UL组中的一组
  • 标签上设置最高的高度,并将其设置为其各自的父级
    本身,以便更好地设置我的页面主题。在这里,我试图找到UL组中
  • 的最高高度,并将其设置为UL

    问题仍然是具体性。第一个UL组的
  • 最高高度被设置为页面上的所有
    标签。UL组(第1行)中最高的
  • 的高度为260px,第2行的高度为156px。然而,260px仍然被设置为页面上的两个UL标签。ULs将在页面上增长,因此我希望代码可以扩展,而不必指定JQuery中的每一行。到目前为止,我已经尝试过:

    // get the height of the tallest LI within each UL group
        var max = Math.max.apply(Math, $(".item-list ul li").map(
            function(){
              return $(this).height();
            }
          ));
    
    // now render the height in each parent UL
    
        $(".item-list ul").each(function() {
          $(this).find(".item-list ul").height(max);
        });
    
    。。。但第二部分不起作用。这是可行的,但是

    $(".item-list ul").height(max);
    
    。。。它将最高的
  • 的高度放在所有UL标签的页面上。理想情况下,最终HTML应为:

    <div class="item-list row-1">
    <ul style="height: 260px;">
    etc...
    
    <div class="item-list row-2">
    <ul style="height: 156px;">
    etc...
    
    
    高度:260px;“>
    等
    高度:156px;“>
    等
    

    基于以下

    如果我理解正确,您应该在
    .each()
    循环中执行
    max
    操作

    function thisHeight(){
        return $(this).height();
    }
    
    $(".item-list ul").each(function() {
        var thisULMax = Math.max.apply(Math, $(this).find("li").map(thisHeight));
        $(this).height(thisULMax);
    });
    
    我还将map函数设置为命名函数,以便您可以重用它


    这里有几个更干净的解决方案

    这个函数将函数传递给
    height()
    ,将其用作迭代器。把事情缩短一点

    function thisHeight(){
        return $(this).height();
    }
    
    $(".item-list ul").height(function() {
        return Math.max.apply(Math, $(this).find("li").map(thisHeight));
    });
    

    这里有另一种使用
    .reduce()
    的方法,尽管它需要一个用于IE8和更低版本的垫片

    function maxHeight(max, elem) {
        var h = $(this).height();
        return max > h ? max : h;
    }
    
    $(".item-list ul").height(function() {
        return $(this).find("li").toArray().reduce(maxHeight, 0);
    });
    

    既然您有两个类“.item list”的
    标记,为什么不试试这个呢:

    $(".item-list ul").eq(0).height(max);
    
    这将只设置HTML中第一个标记的高度。

    似乎很复杂

    $(".item-list ul").each(function(idx, elm) {
         var LIheight = 0;
         $('li', elm).each(function() {
             if ($(this).height() > LIheight) LIheight = $(this).height();
         }).height(LIheight);
    });
    

    仅供参考,
    $(this).find(“.item list ul”)
    不起作用,因为
    this
    ul
    ,而
    .find
    方法只查找嵌套在其调用上下文中的元素。因为
    ul
    中没有嵌套的
    ul
    元素,所以它找不到任何内容。嗨!有人能给我解释一下这里的最高限额吗?