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()

翻訳: の兄弟であり、 の後に来る class のすべての要素に一致しますが、の兄弟であり、 のchild来る要素には一致しません。#parent_1#parent_2

于 2009-03-04T23:59:58.840 に答える
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

最初に思いついたアイデア。問題の要素を選択するための精巧な方法があると確信しています (つまり、$(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

一部の人々はここでいくつかの素晴らしい答えを持っています.

$(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 に答える