Frage

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

Wie kann ich die Anzahl der untergeordneten Zeilen zwischen parent_1 und parent_2 mit jQuery finden?

Edit: Sorry, es nicht klar, dass dies nur ein Beispiel, könnte die Tabelle eine beliebige Anzahl von übergeordneten Zeilen enthalten, und eine beliebige Anzahl von untergeordneten Zeilen

War es hilfreich?

Lösung

Diese erhalten Sie, was Sie wollen

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

Andere Tipps

Dieses:

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

Übersetzung: alle Elemente der Klasse child übereinstimmen, die ein Geschwister, und werden in nach , #parent_1, aber nicht diejenigen, die ein Geschwisterkind von und kommen nach #parent_2 sind

.

Erste Idee in den Sinn kam. Ich bin sicher, es gibt einige aufwendige Art und Weise die Elemente in Frage zu wählen, (das heißt, Sie würden nur $ zu tun haben (Selektor) .length), aber ich kann aus einem aus der Spitze von meinem Kopf nicht denken.

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

Ich denke, der beste Weg, wahrscheinlich manuell zu zählen ist. Es wird schneller, weil Sie abbrechen können, wenn Sie wissen, Sie haben das Zählen getan (nützlich, wenn Ihre Tabelle sehr groß ist).

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

Einige Leute haben ein paar nette Antworten hier, ich schon auf meiner gestartet so krank fügen Sie einfach es für zusätzliche Informationen.

$(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 schert nicht von mir, wie viele Eltern da sind, wird es nur so lange halten zählen das Array groß genug ist.

Unter der Annahme, parent_1 und parent_2 sind die Start- und die End-Reihen jeweils:

$("#parent_1").siblings().size() - 1
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top