2010-05-28 4 views
49

J'ai ce html:jquery selector pour compter le nombre de lignes de table visibles?

<table> 
    <tr style="display:table-row"><td>blah</td></tr> 
    <tr style="display:none"><td>blah</td></tr> 
    <tr style="display:none"><td>blah</td></tr> 
    <tr style="display:table-row"><td>blah</td></tr> 
    <tr style="display:table-row"><td>blah</td></tr> 
</table> 

J'ai besoin de compter le nombre de lignes qui ne pas ont display:none. Comment puis je faire ça?

Répondre

118

Vous pouvez utiliser le :visible selector et .length comme ceci:

var numOfVisibleRows = $('tr:visible').length; 

Si le <table> est lui-même pas visible à l'écran (:visible renvoie false si un parent est caché, l'élément ne doit pas être caché directement), puis utilisez .filter(), comme ceci:

var numOfVisibleRows = $('tr').filter(function() { 
    return $(this).css('display') !== 'none'; 
}).length; 
+2

Et si vous souhaitez uniquement que le nombre inclut les lignes visibles dans le corps de la table, utilisez $ ('tr: visible'). Length - $ ('thead> tr'). –

11

$('tr:visible').length

+0

merci l'homme! J'ai travaillé –

3

$ ("tr: ​​visible") vous obtient les résultats des lignes visibles, et je pense que vous pouvez alors faire .length

+3

Je ne sais pas pourquoi cela est upvoted, '.is (": visible ")' renvoie un ** boolean **, vous ne pouvez pas appeler '.length', au lieu de' .is() 'vous auriez besoin'. filtre() '. –

+0

Merci, a écrit une mauvaise déclaration ... –

5

Vous pouvez également consulter la table particulière lignes visibles

var totalRow = $('#tableID tr:visible').length; 
var totalRowWithoutHeader = totalRow-1; 

Le totalRowWithoutHeader donne le nombre total de lignes sans la ligne d'en-tête.

+2

Mieux vaut ne pas coder en dur le nombre de lignes d'en-tête et utiliser $ ('thead> tr'). Longueur à la place. –

Questions connexes