jQuery: đếm số lượng hàng trong một bảng


Câu trả lời:


955

Sử dụng một bộ chọn sẽ chọn tất cả các hàng và lấy chiều dài.

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

Lưu ý: cách tiếp cận này cũng tính tất cả trs của mỗi bảng lồng nhau!


11
$ ('# myTable tr'). size () sẽ trả về cùng một giá trị.
Máy đóng cửa Garry

31
@Garry - các tài liệu chỉ ra rằng độ dài được ưu tiên hơn kích thước () vì nó nhanh hơn.
tvanfosson

12
.size () gọi .length trong nội bộ
redsapes

2
Nó có một thuộc tính chiều dài bởi vì nó là một mảng. Tôi không biết đủ về lịch sử của jQuery để biết liệu đối tượng jQuery có luôn mở rộng một mảng hay không.
tvanfosson

67
Điều này cũng sẽ tính tr trong khoảng ... $ ('# myTable tbody tr'). Chiều dài; sẽ chỉ tính những người trong thân bàn ..
Dave Lawrence

178

Nếu bạn sử dụng <tbody>hoặc <tfoot>trong bảng của mình, bạn sẽ phải sử dụng cú pháp sau hoặc bạn sẽ nhận được giá trị không chính xác:

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

1
Tôi đang sử dụng <tbody> nhưng tôi nhận được cùng một giá trị
Kreker

1
sử dụng $ ('# myTable> tbody: last> tr'). length;
Riccardo Bassilichi

7
@DevlshOne Điều đó không đúng, độ dài không phải là cơ sở bằng 0, hãy kiểm tra tài liệu: api.jquery.com/length
Mike

1
Khi bạn có các bảng lồng nhau, điều này sẽ chỉ đếm các hàng trong bảng được chỉ định, đó là những gì tôi cần.
GilShalit

1
@ user12379095 Một cái gì đó như thế này: stackoverflow.com/questions/32101764/
Kẻ

49

Hoặc ...

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

jsFiddle DEMO

Điều này sẽ đảm bảo rằng bất kỳ hàng bảng lồng nhau nào cũng không được tính.


Ồ, bởi vì sau đó chỉ số trả về -1. Tài giỏi.
Phường Samuel Edwin

1
Cảm ơn. Chúng là rất ít và xa giữa nhưng các giải pháp thông minh thực hiện hết lần này đến lần khác.
DevlshOne

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

Bỏ qua <thead>các hàng và hàng bảng lồng nhau. Đẹp. jsfiddle.net/6v67a/1576
GreeKatrina

Nếu Last <td>có bảng bên trong, nó sẽ trả về số hàng của bảng đó !! jsfiddle.net/6v67a/1678
Shaunak Shukla

32

Chà, tôi lấy các hàng attr từ bảng và lấy độ dài cho bộ sưu tập đó:

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

Tôi nghĩ rằng jQuery hoạt động ít hơn.


2
+1 - Tốt cho kịch bản mà bạn được chuyển qua phần tử có chứa bảng, ví dụ var rowCount = $ (phần tử) .attr ('rows'). Length;
Nicholas Murray

9
Sử dụng JQuery v1.9.0 và tôi phải sử dụng prop () để truy cập 'rows': $ ("# myTable"). Prop ('rows'). Length; (Chromium 24)
nvcnvn

16

Đây là của tôi về nó:

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

SỬ DỤNG:

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

Hàm rất hay @Ricky G, hữu ích để thực hiện một số điều, ví dụ chức năng này có thể được gọi cho html được tạo từ phụ trợ thay vì dom .. Cảm ơn
Dhaval dave

12

Tôi đã nhận được như sau:

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

3
cộng 1 để có được số lượng hàng
Olivier

8

Hãy thử cái này nếu có tbody

Không có tiêu đề

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

Nếu có tiêu đề thì

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

Thưởng thức!!!


1
Nó bị thiếu () sau chidlren => $ ("# myTable> tbody").
Children

1
Các tiêu đề nên được đính kèm trong <thead>đó nên đến trước <tbody>. Vì vậy, -1 không cần thiết, nếu bảng được thiết kế đúng theo tiêu chuẩn.
ilpelle

vấn đề là, khi datable không có bản ghi, nó hiển thị độ dài là 1, bởi vì datable hiển thị một hàng trống với lớp "lẻ" trong khả năng truy cập .....
Syed Ali

Tôi có một bảng động trên UserScript và đây là giải pháp duy nhất hoạt động
brasofilo

7

Tôi cần một cách để làm điều này trong lợi nhuận AJAX, vì vậy tôi đã viết đoạn này:

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

Rõ ràng đây là một ví dụ nhanh, nhưng nó có thể hữu ích.


6

Tôi thấy điều này hoạt động thực sự tốt nếu bạn muốn đếm hàng mà không cần đếm thứ và bất kỳ hàng nào từ các bảng bên trong bảng:

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

Làm thế nào để sửa đổi nó để đếm cột?
ePandit

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.