Contar o número de linhas da tabela entre duas linhas específicas com jQuery
-
03-07-2019 - |
Pergunta
<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>
Como posso encontrar o número de linhas filho entre parent_1 e parent_2 usando jQuery?
Edit: Desculpe, não deixar claro que este é apenas um exemplo, a tabela pode conter qualquer número de linhas pai, e qualquer número de linhas filho
Solução
Isso vai te dar o que você quer
var childCount = ($('#parent_2').get(0).rowIndex - $('#parent_1').get(0).rowIndex) - 1;
Outras dicas
Este:
$('#parent_1 ~ .child:not(#parent_2 ~ *)').size()
Tradução: combinar todos os elementos de child
classe que são um irmão de, e vem após , #parent_1
, mas não aqueles que são um irmão de e vier após #parent_2
primeira idéia que me veio à mente. Eu tenho certeza que há alguma forma elaborada para selecionar os elementos em questão, (que significa que você só tem que fazer $ (selector) .length), mas eu não consigo pensar em um fora do topo da minha cabeça.
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;
});
Eu acho que a melhor maneira é provavelmente para contar manualmente. Vai ser mais rápido porque você pode quebrar quando você sabe que você fez a contagem (útil se sua mesa é 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");
Algumas pessoas têm algumas respostas agradáveis ??aqui, eu já foi iniciado no meu, então eu só vou adicioná-lo para informações adicionais.
$(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 meu não importa quantos pais estão lá, ele vai apenas manter a contagem desde a matriz é grande o suficiente.
Assumindo parent_1 e parent_2 são o início e as linhas finais, respectivamente:
$("#parent_1").siblings().size() - 1