Domanda

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

Come posso trovare il numero di righe figlio tra parent_1 e parent_2 utilizzando jQuery?

Modifica: scusate, non ho chiarito che questo è solo un esempio, la tabella potrebbe contenere qualsiasi numero di righe principali e qualsiasi numero di righe secondarie

È stato utile?

Soluzione

Questo ti darà ciò che vuoi

var childCount = ($('#parent_2').get(0).rowIndex - $('#parent_1').get(0).rowIndex) - 1;

Altri suggerimenti

Questa:

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

Traduzione: abbina tutti gli elementi della classe child che sono fratelli di, e vengono dopo , # parent_1 , ma non quelli che lo sono un fratello di e vieni dopo # parent_2 .

Prima idea che mi è venuta in mente. Sono sicuro che c'è un modo elaborato per selezionare gli elementi in questione, (nel senso che dovresti semplicemente fare $ (selettore) .length) ma non riesco a pensare a uno fuori dalla mia testa.

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;
});

Penso che il modo migliore sia probabilmente contare manualmente. Sarà più veloce perché puoi interrompere quando sai di aver terminato il conteggio (utile se il tuo tavolo è enorme).

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");

Alcune persone hanno delle belle risposte qui, ho già iniziato con le mie, quindi malato basta aggiungerlo per ulteriori informazioni.

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

EDIT tra il mio non importa quanti genitori ci siano, continuerà a contare finché l'array è abbastanza grande.

Supponendo che parent_1 e parent_2 siano rispettivamente le righe iniziale e finale:

$("#parent_1").siblings().size() - 1
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top