11
<table>
  <tr id="parent_1">
    <td>Parent 1</td>
  </tr>
  <tr class="child">
    <td>Child 1</td>
  </tr>
  <tr class="child">
    <td>Child 2</td>
  </tr>
  ...
  <tr id="parent_2">
    <td>Parent2</td>
  </tr>
  ...
</table>

如何使用 jQuery 找到 parent_1 和 parent_2 之间的子行数?

编辑:抱歉,没有明确说明这只是一个示例,该表可以包含任意数量的父行和任意数量的子行

4

6 回答 6

16

这会让你得到你想要的

var childCount = ($('#parent_2').get(0).rowIndex - $('#parent_1').get(0).rowIndex) - 1;
于 2009-03-05T00:23:47.643 回答
11

这:

$('#parent_1 ~ .child:not(#parent_2 ~ *)').size()

翻译:匹配类中所有child属于 , 的兄弟和之后的元素,#parent_1但不匹配属于 的兄弟和之后的元素#parent_2

于 2009-03-04T23:59:58.840 回答
2

想到的第一个想法。我确信有一些精心设计的方法可以选择有问题的元素(这意味着您只需要做 $(selector).length),但我想不出一个。

var doCount = false;
var numberOfChildren = 0;

$('tr').each(function(i){
    if($(this).is("#parent_2"))
        doCount = false;

    if(count)
        numberOfChildren++;

    if($(this).is("#parent_1"))
        doCount = true;
});
于 2009-03-04T23:56:45.197 回答
2

我认为最好的方法可能是手动计数。它会更快,因为当你知道你已经完成计数时你可以停下来(如果你的桌子很大,这很有用)。

var rowid1 = 'parent_1';
var rowid2 = 'parent_2';

var rows = $("#"+rowid1).parent().find('tr');
var count = 0;

for (var i = 0; i < rows.size(); i++) {
    var el = rows.get(i);

    // Done counting
    if (el.id == rowid2) break;

    if (el.id != rowid1) {
        ++count;
    }
}

alert("There are " + count + " rows between");
于 2009-03-05T00:13:38.590 回答
2

有些人在这里有一些很好的答案,我已经开始使用我的了,所以我只是添加它以获取更多信息。

$(document).ready(function() {
    n = 0;
    var x = new Array(0,0,0);

    $("table tr").each(function(i)
    {
        if($(this).hasClass("child"))
        {
            x[n] += 1;
        }
        else
        {
            n += 1;
        }
    });

    for(var y = 0; y < x.length; y++)
    {
        alert(x[y]);
    }
});

顺便说一句,我的编辑不在乎有多少父母,只要数组足够大,它就会一直计数。

于 2009-03-05T00:22:08.663 回答
0

假设 parent_1 和 parent_2 分别是开始行和结束行:

$("#parent_1").siblings().size() - 1
于 2009-03-04T23:54:20.913 回答