1

我有这个小提琴链接。在此您可以看到我的标记就像 ul 中的一堆 li。在此,我将 3 个 lis 作为一行,将下一个 3 个 lis 作为另一行,依此类推。现在我使用 jQuery 来获取一个 li 的高度,该高度比其他 2 个 lis 高,并使 2 个 lis 与最高 li 的高度相同。在这里,我的 jQuery 对第一行运行良好,但不适用于其他行。那么有人可以告诉我如何为其他行设置相同的高度吗?任何帮助和建议都将不胜感激。我的 jQuery 代码是这样的

<script type="text/javascript">
  jQuery(document).ready(function(){
    jQuery(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;
      itemSet.slice(0,3).each(function(i) {
        if ($(this).height() > maxRowHeight )
          maxRowHeight = $(this).height();
        });  
      itemSet.slice(0,3).each(function(i) {
        $(this).css('height', maxRowHeight + "px");
      });
    }
  });
</script>
4

3 回答 3

2

您需要更新.slice()每行中的数字,因此,.slice(0, 3)变为.slice(3, 6),然后.slice(6, 9)等等。像下面这样的东西可以解决问题:

(function($) {
  function normalizeHeight(items) {
    var maxHeight = 0, itemHeight;

    items.each(function() {
      itemHeight = $(this).height();
      if (itemHeight > maxHeight) {
        maxHeight = itemHeight;
      }
    }).height(maxHeight + 'px');
  }

  $(document).ready(function(){
    var itemsPerRow = 3,
        items = $('ul.products li'),
        rows = items.length / itemsPerRow, 
        r, min, max;

    if (rows < 1) rows = 1;

    for(r = 0; r < rows; r++) {
      min = itemsPerRow * r,
      max = min + itemsPerRow;
      normalizeHeight(items.slice(min, max));
    }
  });
}(jQuery));

在 jsbin 上放了一个演示

于 2012-12-10T12:09:02.237 回答
0

您的逻辑中有一个漏洞来选择您正在操作的切片。你总是在前 3 个项目上工作。

试试这个:

function normalizeRowHeight(row, itemSet) {
  var maxRowHeight = 0;
  itemSet.slice(row * 3,(row + 1)*3).each(function(i) {
    if ($(this).height() > maxRowHeight )
      maxRowHeight = $(this).height();
    });  
  itemSet.slice(row * 3,(row + 1)*3).each(function(i) {
    $(this).css('height', maxRowHeight + "px");
  });
}
于 2012-12-10T11:16:39.250 回答
0

你可以这样做

$(document).ready(function()
        {
            var i=0,j=0;
            $('li').each(function(){
                j=$(this).height();
                if (i<j)
                    i=j;
            });
            $('li').each(function(){
                $(this).height(i);//set Max height of li to other li
                alert($(this).height());
            });
        });

见工作演示

于 2012-12-10T11:29:50.200 回答