获得每四个列表项的最高高度

时间:2014-05-27 22:50:27

标签: jquery

我有一个由数据库生成的项目列表,列表项适合四个到一行,而没有将它们放在一个元素中用作“”。所以从根本上说,它只是一个简单的生成列表,在由于容器宽度而产生自动换行符之前恰好适合四行。

总之。

我想获得每个“行”中最高元素的高度,并将其分配给该行中的四个列表元素。

实施例: 如果我有 -

<li height='120'/> 
<li height='140'/> 
<li height='180'/> 
<li height='130'/>

我希望这四个人的高度都是180,然后我的下四个列表元素的高度分别为200,300,250和280,我希望这四个人拥有300个。

我已经有了一些代码,我不确定我是否以正确的方式进行此操作,但是在正确的方向上的任何推动都会非常感激....这就是我到目前为止所拥有的......

jQuery的:

function setListHeight()
{
    var maxHeight = 0,
    halfHeight = 0,
    list = $(".list");

    for( var i = 0 ; i <= $(".list").size() ; i ++ )
    {
        if( i % 4 == 0 )
        {
            $(".list").each(function()
            {
                maxHeight = Math.max($(this).height(), maxHeight);
            });
        }
    }
    list.css({ height : maxHeight });
}

setListHeight();

HTML / PHP:

foreach( $cats as $cat ) 
{
    echo "<li class='list cf'>";
    echo "<h3 id='".$cat['cat_slug']."'>" . $cat['cat_name'] . "<!--<span class='drop_arrow'>></span>--></h3>";
    $subCategories = $this -> categories -> getSubcatsFromParent( $cat[ 'cat_id' ] );

    foreach($subCategories as $sub)
    {
        if( preg_match('/\s/',$sub['cat_name']) )
        {
            $name = strtolower(str_replace(' ', '-', $sub['cat_name']));
        } 
        else 
        {
            $name = $sub['cat_name'];
        }
        echo "<a href='category/".$name."'>" . $sub['cat_name'] . "</a>";
    }

    echo "</li>";
}

2 个答案:

答案 0 :(得分:1)

首先,你不能将'height'与list-item一起使用,所以假设你只是试图从4组中获取最高的<li>,这就是你如何使用jQuery。

我们假设这是你的标记:

<ul class="list">
    <li>text<br/><br/>text</li>
    <li>text<br/><br/>text<br/>text</li>
    <li>text</li>
    <li>text</li>
</ul>
<ul class="list">
    <li>a</li>
    <li>a</li>
    <li>aa<br/><br/><br/>aaaa</li>
    <li>a</li>
</ul>

// write a separate function to get height for current element
function thisHeight(){
    return $(this).height();
}

// loop through the elements and get tallest
$("ul.list").each(function(){
     var maxH = Math.max.apply(Math, $(this).find("li").map(thisHeight));
     $(this).find('li').height(maxH);
})

jsfiddle

答案 1 :(得分:1)

您可以使用:nth-child(4n + 1)为每4个选择一个<li>

然后使用$(this).nextAll().slice(0,3)选择使用<li>选择的每个<li>的下一个nth-child()

然后使用.add()一次选择<li>及其3个兄弟姐妹,并将.each()功能应用于两者。

结果是:

$('li:nth-child(4n + 1)').each(function(){
    var maxHeight = 0;
    $(this).add($(this).nextAll().slice(0,3)).each(function(){
        maxHeight = Math.max($(this).height(), maxHeight);
    }).height(maxHeight);
});

演示:

http://jsfiddle.net/2Jj8y/3/