Zählnummer Tabellenzeilen zwischen zwei bestimmten Zeilen mit jQuery
-
03-07-2019 - |
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
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