You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery如何实现每行3个<li>元素按行设置相同高度

3列列表逐行等高实现方案

现存问题

当前3列布局的<li>列表,原有jQuery逻辑会遍历所有列表项计算全局最大高度,给全部<li>统一设置该高度,无法实现同一行列表项高度一致、不同行随内容自适应高度的需求。

原有问题代码:

var maxHeight2 = 0;
$(".woo-cat-list li").each(function() {
  if ($(this).height() > maxHeight2) {
    maxHeight2 = $(this).height();
  }
});

$(".woo-cat-list li").height(maxHeight2);

对应HTML结构:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<ul class="woo-cat-list">
  <li class="first">aa</li>
  <li>aa</li>
  <li>aa</li>
  <li class="first">aa</li>
  <li>aa</li>
  <li>aa</li>
  <li class="first">aa</li>
  <li>aa</li>
  <li>aa</li>
</ul>

实现代码

核心逻辑:按每3个列表项为一组(对应一行),单独计算每组的最大高度,再给组内元素统一设置高度;增加窗口resize监听,避免响应式布局下高度错位。

function setListRowEqualHeight() {
  const $listItems = $(".woo-cat-list li");
  const rowCount = 3; // 每行展示的列表项数量,调整列数直接修改这个值即可
  // 先重置所有列表项高度,避免旧的固定高度干扰计算
  $listItems.height("auto");

  // 逐行遍历计算高度
  for (let i = 0; i < $listItems.length; i += rowCount) {
    const $currentRowItems = $listItems.slice(i, i + rowCount);
    let currentRowMaxH = 0;
    // 计算当前行的最大高度
    $currentRowItems.each(function() {
      const itemH = $(this).height();
      currentRowMaxH = itemH > currentRowMaxH ? itemH : currentRowMaxH;
    });
    // 给当前行所有列表项设置统一高度
    $currentRowItems.height(currentRowMaxH);
  }
}

// 页面DOM加载完成后初始化
$(function() {
  setListRowEqualHeight();
  // 窗口尺寸变化时重新计算,适配响应式场景
  $(window).on("resize", setListRowEqualHeight);
});

注意事项

  • 如果列表内容是接口异步加载的,要等内容全部渲染到页面后再调用setListRowEqualHeight(),否则高度计算会出错
  • 如果后续调整成每行2个/4个,只需要修改rowCount的数值即可,不需要改动其他逻辑

内容的提问来源于stack exchange,提问作者user3044800

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:48:51