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.

Communauté
la source

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!

tvanfosson
la source
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;
James Moberg
la source
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.

DevlshOne
la source
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.

jjroman
la source
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();
Ricky G
la source
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();
chifliiiii
la source
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!!!

BornToCode
la source
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.

dennismonsewicz
la source
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;
Zoé
la source
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;
Cybernétique
la source
1

var trLength = jQuery('#tablebodyID >tr').length;

sivaprakash
la source