计算所有元素,直到出现具有相同类名的下一个元素

时间:2013-01-16 14:01:10

标签: jquery

我需要在下面的表格布局中获取两个windows-detail-spec-label类之间的所有windows-detail-spec-group的数量 - 所以我可以使用该数字来重新排列不同屏幕尺寸的表格。

我如何计算它们以便得到正确的数字?

对于第一组元素,它应该是2,因为windows-detail-spec-label在两个内容中出现两次(注意:下一个windows-detail-spec-group位于第二个.row-label tr

table html layout

我目前的代码:

$('.windows-details-spec-group').each(function () {

  var rowspanCount = $(this).nextUntil('.windows-details-spec-group').filter('.windows-details-spec-label').length;

  $(this).unwrap().next('tr.row-default').prepend(this);
  $(this).attr({
      colspan: 1,
      rowspan: rowspanCount  // need this variable to be correct
  });
});

所以基本上我需要计算一个类在两个元素之间出现的次数,无论DOM在哪里

2 个答案:

答案 0 :(得分:2)

在我看来,您需要对感兴趣点附近的DOM结构做出一些额外的合理假设 - “无论DOM中的哪个地方”过于通用,您实际上都很难正确实施。

假设任何td.windows-details-spec-group将成为其父行的唯一子项,并且对于td.windows-details-spec-label(这在某些情况下似乎就是这种情况)是相同的,您可以这样做:

$('.windows-details-spec-group').each(function () {
    var rowspan = $(this)
                  .closest("tr")
                  .nextUntil("tr:has(.windows-details-spec-group)")
                  .find(".windows-details-spec-label")
                  .length;
});

答案 1 :(得分:1)

        $('.windows-details-spec-group').each(function () {

          var rowspanCount = $(this).nextUntil('.windows-details-spec-group').find(".windows-detail-spec-label").length;

          $(this).attr({
              colspan: 1,
              rowspan: rowspanCount  // need this variable to be correct
          });
        });

在这里演示http://jsfiddle.net/NNfmS/