【问题标题】:jQuery make all the container to equal heightjQuery使所有容器的高度相等
【发布时间】:2012-12-11 06:40:13
【问题描述】:

我的标记类似于this。现在在此链接中,您可以看到ul 中有3 个lis。在该标记中,您可以看到li 类名首先命名为last。 li 类名 last 是该行的最后一个 li 元素。现在根据我的要求,我已经连续取了 3 li,接下来的 3 li 在另一行,依此类推。我有大约 100 li 像这样。

现在在该标记中,您可以在 h3 标记中看到标题的长度不同,它只是扰乱了内容的高度。我不能为任何容器分配任何恒定的高度,因为标题长度在每个项目中都会非常长。所以有人可以在 jQuery 中告诉我如何使每一行中所有其他容器的高度相同。

逻辑将类似于它会在一行内查看,这意味着一行中的三个 li 并且其高度大于其他两个,它将声明一个为最高高度,并使其他两个 li 达到该高度。通过这种方式,我们可以使所有内容按高度对齐。任何帮助和建议都将不胜感激。

注意

我无法更改我的标记。它将保持不变。

【问题讨论】:

  • 在这种情况下使用<table> 会更合适。
  • @TwiNight 感谢您的回复,但很抱歉我无法更改我的标记。它将保持不变...

标签: jquery css jquery-selectors


【解决方案1】:

此代码解决了您的要求,但没有排列 LI 内部的按钮,这是一个不同的问题。也许您可以将按钮放在 LI 的底部,使用 CSS 相对/绝对定位来排列它们。

http://jsfiddle.net/NWC2Q/10/

$(function() {
  var items = $("ul.products li");
  var rows = items.length / 3;
  if (rows <= 0)
    rows = 1;

  for(var r=0;r<rows;r++)
  {
    normalizeRowHeight(r, items);
  }    
});

function normalizeRowHeight(row, itemSet)
{
  var maxRowHeight = 0; 
  var startIndex = (row == 0 ? 1 : (row + 1) * 3) - 1;
  var endIndex = (startIndex + 2) > itemSet.length ? itemSet.length - 1: (startIndex + 2);

  rowItems = itemSet.slice(startIndex, endIndex);

  var maxRowHeight = Math.max.apply(null, rowItems.map(function(i,e) {
    return $(e).height();
  }).get());

  rowItems.each(function(i) {
    $(this).css('height', maxRowHeight + "px");
  });  
}

【讨论】:

  • 感谢您的回复,但您能否给我们工作小提琴或演示链接,每个人都可以查看和检查它们。
  • 感谢您的编辑,但我可以看到它仅适用于第一行而不适用于第二行..另一件事我希望按钮也位于每个容器的底部..
  • 位置:绝对属性对于放置在容器底部的按钮可以正常工作,但第二行的高度不起作用...
  • 你能不能只用 $.map() 和 array.max() 来得到最高的?
  • 好调用更新代码以使用 map 和 max 并添加行切片计算逻辑,因此它将处理的不仅仅是第一行。
猜你喜欢
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
相关资源
最近更新 更多