nextUntil()在这种情况下不起作用

时间:2011-12-23 16:39:47

标签: jquery

<table>
  <tr class="codesgroupheader"><td>Header1</td></tr>
  <tr><td>1</td></tr>
  <tr class="codesgroupheader"><td>Header2</td></tr>
  <tr><td>2</td></tr>
  <tr class="codesgroupheader"><td>Header3</td></tr>
  <tr><td>3</td></tr>
  <tr class="codesgroupheader"><td>Header4</td></tr>
</table>

这是jQuery代码

$('.codesgroupheader').not(':last').each(function() {
   alert($(this).nextUntil('.codesgroupheader').find('tr').size());
});

但它总是让我归零......

2 个答案:

答案 0 :(得分:4)

您的代码执行以下操作:

$(this)                        // <tr>           <-- = this
.nextUntil('.codesgroupheader')// All elements between this and <tr class="...">
.find('tr')                    // Seeks for a <tr> inside <tr> - Not found

如果要选择给定类的<tr>元素数,请使用:

alert($('tr.codesgroupheader').not(':last').length);

如果您想获得当前和下一个<tr>之间<tr class=...>的数量,请使用:

// this = any <tr>
$(this).nextUntil(".codesgroupheader", "tr").length;

有关nextUntil功能的其他参考和用法,请参阅jQuery documentation

答案 1 :(得分:2)

this指的是当前的tr元素。

nextUntil('.codesgroupheader')会找到this与下一个tr.codesgroupheader之间的所有元素。

您的.find尝试在该集内搜索(因此在tr内)。您可以完全跳过find,或者如果由于某种原因您认为其中可能有其他元素,请使用filter代替({em>或第二个参数nextUntil ),过滤当前集。

所以要么使用

$('.codesgroupheader').not(':last').each(function() {
   alert($(this).nextUntil('.codesgroupheader').size());
});

或过滤

$('.codesgroupheader').not(':last').each(function() {
   alert($(this).nextUntil('.codesgroupheader').filter('tr').size());
});

或(使用nextUntil 的第二个参数)

$('.codesgroupheader').not(':last').each(function() {
   alert($(this).nextUntil('.codesgroupheader', 'tr').size());
});