Подсчитать количество строк таблицы между двумя конкретными строками с помощью jQuery

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

Как узнать количество дочерних строк между parent_1 и parent_2, используя jQuery?

Редактировать. Извините, не дал понять, что это всего лишь пример, таблица может содержать любое количество родительских строк и любое количество дочерних строк

11 голосов | спросил Callum 5 MaramThu, 05 Mar 2009 02:50:25 +03002009-03-05T02:50:25+03:0002 2009, 02:50:25

6 ответов


0

Это даст вам то, что вы хотите

var childCount = ($('#parent_2').get(0).rowIndex - $('#parent_1').get(0).rowIndex) - 1;
ответил Chatu 5 MaramThu, 05 Mar 2009 03:23:47 +03002009-03-05T03:23:47+03:0003 2009, 03:23:47
0

Это:

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

Перевод: сопоставьте все элементы класса child, которые являются родственными, и идут после , ---- +: = 2 =: + ----, но не те, которые являются братьями и сестрами после #parent_1

ответил Miles 5 MaramThu, 05 Mar 2009 02:59:58 +03002009-03-05T02:59:58+03:0002 2009, 02:59:58
0

Первая идея, которая пришла в голову. Я уверен, что есть какой-то сложный способ выбора элементов, о которых идет речь, (то есть, вам просто нужно сделать $ (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;
});
ответил Samantha Branham 5 MaramThu, 05 Mar 2009 02:56:45 +03002009-03-05T02:56:45+03:0002 2009, 02:56:45
0

Я думаю, что лучший способ - это считать вручную. Это будет быстрее, потому что вы можете прерваться, когда узнаете, что подсчитали (полезно, если у вас огромный стол).

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");
ответил chroder 5 MaramThu, 05 Mar 2009 03:13:38 +03002009-03-05T03:13:38+03:0003 2009, 03:13:38
0

У некоторых людей есть несколько хороших ответов здесь, я уже начал свой, так что плохо, просто добавьте его для дополнительной информации.

$(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]);
    }
});

РЕДАКТИРОВАТЬ Между прочим, мне все равно, сколько там родителей, он будет продолжать считать, пока массив достаточно большой.

ответил Ólafur Waage 5 MaramThu, 05 Mar 2009 03:22:08 +03002009-03-05T03:22:08+03:0003 2009, 03:22:08
0

Предполагая, что parent_1 и parent_2 являются начальной и конечной строками соответственно:

$("#parent_1").siblings().size() - 1
ответил qpingu 5 MaramThu, 05 Mar 2009 02:54:20 +03002009-03-05T02:54:20+03:0002 2009, 02:54:20

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132