jQuery: policz liczbę wierszy w tabeli


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!


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;

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.


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.


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();

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


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


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.


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;

Jak zmodyfikować, aby policzyć kolumny?
ePandit

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.