Question

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

Comment trouver le nombre de lignes enfant entre parent_1 et parent_2 à l'aide de jQuery?

Éditer: Désolé, cela n'a pas été clair: il s'agit d'un tableau pouvant contenir un nombre quelconque de lignes parent et un nombre quelconque de lignes enfants

Était-ce utile?

La solution

Cela vous donnera ce que vous voulez

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

Autres conseils

Ceci:

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

Traduction: correspond à tous les éléments de la classe enfant qui sont un frère de, et vient après , # parent_1 , mais pas ceux qui le sont. un frère et viennent après # parent_2 .

Première idée qui m'est venue à l’esprit. Je suis sûr qu'il existe un moyen sophistiqué de sélectionner les éléments en question (cela signifie que vous devez simplement faire $ (sélecteur) .length), mais je ne peux pas en penser à un seul problème de ma tête.

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

Je pense que le meilleur moyen est probablement de compter manuellement. Ce sera plus rapide parce que vous pouvez rompre quand vous savez que vous avez fini de compter (utile si votre table est énorme).

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

Certaines personnes ont de bonnes réponses à ce sujet. J'avais déjà commencé la mienne si malade que je ne pouvais que l'ajouter pour plus d'infos.

$(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 btw mien ne se soucie pas du nombre de parents qui y travaillent, il va continuer à compter tant que le tableau sera assez grand.

En supposant que parent_1 et parent_2 sont respectivement les lignes de début et de fin:

$("#parent_1").siblings().size() - 1
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top