jQuery: policz liczbę wierszy w tabeli

491

Jak policzyć liczbę elementów tr w tabeli za pomocą jQuery?

Wiem, że istnieje podobne pytanie , ale chcę tylko sumę wierszy.

Społeczność
źródło

Odpowiedzi:

955

Użyj selektora, który wybierze wszystkie wiersze i przyjmie długość.

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

Uwaga: to podejście uwzględnia również wszystkie trs każdego zagnieżdżonego stołu!

tvanfosson
źródło
11
$ ('# myTable tr'). size () zwróci tę samą wartość.
Garry Shutler,
31
@ Garry - dokumenty wskazują, że długość jest lepsza niż rozmiar (), ponieważ jest szybsza.
tvanfosson
12
.size () wywołuje .length wewnętrznie
redsquare
2
Ma właściwość length, ponieważ jest tablicą. Nie znam wystarczająco historii jQuery, aby wiedzieć, czy obiekt jQuery zawsze rozszerzał tablicę.
tvanfosson,
67
To również będzie liczyć tr w thead ... $ ('# myTable tbody tr'). Length; będą liczyć tylko te w ciałach stołowych.
Dave Lawrence
178

Jeśli użyjesz <tbody>lub <tfoot>w tabeli, będziesz musiał użyć następującej składni lub otrzymasz niepoprawną wartość:

var rowCount = $('#myTable >tbody >tr').length;
James Moberg
źródło
1
Korzystam z <tbody>, ale otrzymuję tę samą wartość
Kreker
1
użyj $ ('# myTable> tbody: last> tr'). length;
Riccardo Bassilichi
7
@DevlshOne To nieprawda, długość nie jest zerową podstawą, sprawdź dokumentację: api.jquery.com/length
Mike
1
Po zagnieżdżeniu tabel liczą się tylko wiersze w określonej tabeli, a tego właśnie potrzebowałem.
GilShalit
1
@ user12379095 Coś w tym stylu: stackoverflow.com/questions/32101764/…
AntonChanning
49

Alternatywnie...

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

jsFiddle DEMO

Zapewni to, że wszelkie zagnieżdżone wiersze tabeli również nie będą liczone.

DevlshOne
źródło
Och, bo wtedy indeks zwraca -1. Sprytny.
Samuel Edwin Ward
1
Dzięki. Jest ich niewiele, ale sprytne rozwiązania wymykają się od czasu do czasu.
DevlshOne
var rowCount = $('table#myTable tr:last').index() + 1;
Ouadie,
Ignoruje <thead>wiersze i zagnieżdżone wiersze tabeli. Miły. jsfiddle.net/6v67a/1576
GreeKatrina
Jeśli Last <td>ma tabelę wewnętrzną, zwraca liczbę wierszy tej tabeli !! jsfiddle.net/6v67a/1678
Shaunak Shukla
32

Cóż, pobieram wiersze attr z tabeli i otrzymuję długość dla tej kolekcji:

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

Myślę, że jQuery działa mniej.

jjroman
źródło
2
+1 - Dobre w scenariuszu, w którym przekazano element zawierający tabelę, np. Var rowCount = $ (element) .attr ('Row'). Length;
Nicholas Murray
9
Korzystając z JQuery v1.9.0 i muszę użyć prop (), aby uzyskać dostęp do „Row”: $ („# myTable”). Prop („Row”). Length; (Chromium 24)
nvcnvn
16

Oto moje zdanie na ten temat:

//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;
};

STOSOWANIE:

var rowCount = $('#productTypesTable').rowCount();
Ricky G.
źródło
Bardzo ładny funkcja @Ricky G, przydatne do zrobienia kilka rzeczy przykład funkcja ta może być wywołana dla HTML generowanego z backend zamiast DOM także .. Dzięki
Dhaval Dave
12

Mam następujące:

jQuery('#tableId').find('tr').index();
chifliiiii
źródło
3
plus 1, aby uzyskać liczbę rzędów
Olivier
8

spróbuj tego, jeśli jest ktoś

Bez nagłówka

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

Jeśli jest nagłówek, to

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

Cieszyć się!!!

BornToCode
źródło
1
Brakuje () po chidlren => $ ("# myTable> tbody"). Children (). Length
DrB
1
Nagłówek powinien być załączony, w <thead>którym powinien znajdować się wcześniej <tbody>. Więc -1 nie powinno być potrzebne, jeśli stół jest odpowiednio zaprojektowany zgodnie ze standardem.
ilpelle
Problem jest, gdy DataTable ma rekord pokazuje długość jako 1, ponieważ DataTable renderowania pusty wiersz z klasą „dziwne” w DataTable .....
Syed Ali
Mam dynamiczną tabelę w języku UserScript i to było jedyne rozwiązanie, które zadziałało
brasofilo
7

Potrzebowałem sposobu, aby to zrobić w ramach zwrotu AJAX, więc napisałem ten kawałek:

<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>

Oczywiście jest to szybki przykład, ale może być pomocny.

dennismonsewicz
źródło
6

Zauważyłem, że działa to naprawdę dobrze, jeśli chcesz liczyć wiersze bez liczenia th i dowolnych wierszy z tabel w tabelach:

var rowCount = $("#tableData > tbody").children().length;
Zoe
źródło
Jak zmodyfikować, aby policzyć kolumny?
ePandit
3
row_count =  $('#my_table').find('tr').length;
column_count =  $('#my_table').find('td').length / row_count;
Cybernetyczny
źródło
1

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

sivaprakash
źródło