jQuery: compter le nombre de lignes dans une table


491

Comment compter le nombre d'éléments tr dans une table à l'aide de jQuery?

Je sais qu'il y a une question similaire , mais je veux juste le nombre total de lignes.

Réponses:


955

Utilisez un sélecteur qui sélectionnera toutes les lignes et prendra la longueur.

var rowCount = $('#myTable tr').length;

Remarque: cette approche compte également tous les très de chaque table imbriquée!


11
$ ('# myTable tr'). size () renverra la même valeur.
Garry Shutler

31
@Garry - les documents indiquent que la longueur est préférée à size () car elle est plus rapide.
tvanfosson

12
.size () appelle .length en interne
redsquare

2
Il a une propriété length car c'est un tableau. Je ne connais pas assez l'histoire de jQuery pour savoir si l'objet jQuery a toujours étendu un tableau.
tvanfosson

67
Cela comptera également tr dans la tête ... $ ('# myTable tbody tr'). Length; comptera ceux uniquement dans les corps de table ..
Dave Lawrence

178

Si vous utilisez <tbody>ou <tfoot>dans votre tableau, vous devrez utiliser la syntaxe suivante ou vous obtiendrez une valeur incorrecte:

var rowCount = $('#myTable >tbody >tr').length;

1
J'utilise <tbody> mais j'obtiens la même valeur
Kreker

1
use $ ('# myTable> tbody: last> tr'). length;
Riccardo Bassilichi

7
@DevlshOne Ce n'est pas vrai, la longueur n'est pas une base nulle, consultez la documentation: api.jquery.com/length
Mike

1
Lorsque vous avez des tables imbriquées, cela ne comptera que les lignes de la table spécifiée, ce dont j'avais besoin.
GilShalit

1
@ user12379095 Quelque chose comme ceci: stackoverflow.com/questions/32101764/…
AntonChanning

49

Alternativement ...

var rowCount = $('table#myTable tr:last').index() + 1;

jsFiddle DEMO

Cela garantira que toutes les lignes de table imbriquées ne sont pas également comptées.


Oh, car alors l'index renvoie -1. Intelligent.
Samuel Edwin Ward

1
Merci. Ils sont rares, mais des solutions intelligentes glissent de temps en temps.
DevlshOne

var rowCount = $('table#myTable tr:last').index() + 1;
Ouadie

Ignore les <thead>lignes et les lignes de table imbriquées. Agréable. jsfiddle.net/6v67a/1576
GreeKatrina

Si Last <td>a une table interne, elle retourne le nombre de lignes de cette table !! jsfiddle.net/6v67a/1678
Shaunak Shukla

32

Eh bien, j'obtiens les lignes attr de la table et j'obtiens la longueur de cette collection:

$("#myTable").attr('rows').length;

Je pense que jQuery fonctionne moins.


2
+1 - Bon pour le scénario où vous passez un élément contenant une table, par exemple var rowCount = $ (element) .attr ('rows'). Length;
Nicholas Murray

9
En utilisant JQuery v1.9.0 et je dois utiliser prop () pour accéder aux 'lignes': $ ("# myTable"). Prop ('lignes'). Length; (Chrome 24)
nvcnvn

16

Voici mon point de vue:

//Helper function that gets a count of all the rows <TR> in a table body <TBODY>
$.fn.rowCount = function() {
    return $('tr', $(this).find('tbody')).length;
};

USAGE:

var rowCount = $('#productTypesTable').rowCount();

Très belle fonction @Ricky G, utile pour faire plusieurs choses, par exemple cette fonction peut être appelée pour le HTML généré à partir du backend au lieu de dom aussi .. Merci
Dhaval dave

12

J'ai obtenu ce qui suit:

jQuery('#tableId').find('tr').index();

3
plus 1 pour obtenir le nombre de lignes
Olivier

8

essayez celui-ci s'il y a tbody

Sans en-tête

$("#myTable > tbody").children.length

S'il y a un en-tête alors

$("#myTable > tbody").children.length -1

Prendre plaisir!!!


1
Il manque () après chidlren => $ ("# myTable> tbody"). Children (). Length
DrB

1
L'en-tête doit être inclus dans <thead>lequel doit précéder <tbody>. Ainsi, le -1 ne devrait pas être nécessaire, si la table est correctement conçue selon la norme.
ilpelle

Le problème est que lorsque datatable n'a pas d'enregistrement, il affiche une longueur égale à 1, car datatable rend une ligne vide avec la classe "impair" dans datatable .....
Syed Ali

J'ai une table dynamique sur un UserScript et ce fut la seule solution qui a fonctionné
brasofilo

7

J'avais besoin d'un moyen de le faire dans un retour AJAX, j'ai donc écrit cette pièce:

<p id="num_results">Number of results: <span></span></p>

<div id="results"></div>

<script type="text/javascript">
$(function(){
    ajax();
})

//Function that makes Ajax call out to receive search results
var ajax = function() {
    //Setup Ajax
    $.ajax({
        url: '/path/to/url', //URL to load
        type: 'GET', //Type of Ajax call
        dataType: 'html', //Type of data to be expected on return
        success: function(data) { //Function that manipulates the returned AJAX'ed data
            $('#results').html(data); //Load the data into a HTML holder
            var $el = $('#results'); //jQuery Object that is holding the results
            setTimeout(function(){ //Custom callback function to count the number of results
                callBack($el);
            });
        }
    });
}

//Custom Callback function to return the number of results
var callBack = function(el) {
    var length = $('tr', $(el)).not('tr:first').length; //Count all TR DOM elements, except the first row (which contains the header information)
    $('#num_results span').text(length); //Write the counted results to the DOM
}
</script>

Évidemment, ceci est un exemple rapide, mais il peut être utile.


6

J'ai trouvé que cela fonctionnait très bien si vous voulez compter les lignes sans compter le th et les lignes des tables à l'intérieur des tables:

var rowCount = $("#tableData > tbody").children().length;

Comment le modifier pour compter les colonnes?
ePandit

3
row_count =  $('#my_table').find('tr').length;
column_count =  $('#my_table').find('td').length / row_count;

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.