Thêm hàng bảng trong jQuery


2425

Phương thức tốt nhất trong jQuery để thêm một hàng bổ sung vào bảng làm hàng cuối cùng là gì?

điều này có chấp nhận được không?

$('#myTable').append('<tr><td>my data</td><td>more data</td></tr>');

Có giới hạn nào đối với những gì bạn có thể thêm vào một bảng như thế này (chẳng hạn như đầu vào, chọn, số lượng hàng) không?


2
Thxs Ash. Tôi cũng chỉ học jQuery và thấy khó để tìm ra cách tốt nhất, đặc biệt là những điều đơn giản. Lý do chúng là 2 câu hỏi là vì tôi đã đăng một và sau đó gần một giờ tôi nhận ra rằng tôi nên đặt cái kia vào và không nghĩ rằng tôi nên thay đổi cái đầu tiên.
Darryl Hein


17
FYI - Tránh sử dụng nhiều phụ lục (làm chậm hiệu suất rất nhiều), thay vào đó hãy xây dựng chuỗi của bạn hoặc sử dụng JavaScript tham gia nhanh hơn nhiều.
Gerrit Brink


Chỉ trong trường hợp nếu hàng quá phức tạp, những gì tôi làm là giữ ẩn hàng đầu tiên với cấu trúc được yêu cầu, tạo bản sao và sửa đổi văn bản và chèn sau hàng đầu tiên, theo cách này nếu bạn tìm nạp dữ liệu từ phản hồi ajax, bảng của bạn sẽ được tạo, hãy nhớ sao chép nó bên ngoài vòng lặp, sau đó sử dụng nó để sửa đổi nội dung bên trong vòng lặp. $ ("# mainTable tbody"). chắp thêm (hàng); hàng là bản sao được sửa đổi :)
Aadam

Câu trả lời:


2143

Cách tiếp cận mà bạn đề xuất không được đảm bảo để cung cấp cho bạn kết quả mà bạn đang tìm kiếm - nếu bạn có một tbodyví dụ:

<table id="myTable">
  <tbody>
    <tr>...</tr>
    <tr>...</tr>
  </tbody>
</table>

Bạn sẽ kết thúc với những điều sau đây:

<table id="myTable">
  <tbody>
    <tr>...</tr>
    <tr>...</tr>
  </tbody>
  <tr>...</tr>
</table>

Do đó, tôi muốn giới thiệu phương pháp này thay thế:

$('#myTable tr:last').after('<tr>...</tr><tr>...</tr>');

Bạn có thể bao gồm mọi thứ trong after()phương thức miễn là HTML hợp lệ, bao gồm nhiều hàng theo ví dụ trên.

Cập nhật: Xem lại câu trả lời này sau hoạt động gần đây với câu hỏi này. mí mắt làm cho một nhận xét tốt rằng sẽ luôn luôn có một tbodyDOM; Điều này đúng, nhưng chỉ khi có ít nhất một hàng. Nếu bạn không có hàng, sẽ không có hàng tbodytrừ khi bạn tự chỉ định một hàng.

DaRKoN_ đề nghị nối thêm vào tbodythay vì thêm nội dung sau lần cuối tr. Điều này xoay quanh vấn đề không có hàng, nhưng vẫn không chống đạn vì về mặt lý thuyết bạn có thể có nhiều tbodyyếu tố và hàng sẽ được thêm vào mỗi hàng.

Cân nhắc mọi thứ, tôi không chắc có một giải pháp một dòng duy nhất cho mọi tình huống có thể xảy ra. Bạn sẽ cần đảm bảo các mã số jQuery với đánh dấu của bạn.

Tôi nghĩ rằng giải pháp an toàn nhất có lẽ là đảm bảo bạn tableluôn bao gồm ít nhất một tbodytrong đánh dấu của bạn, ngay cả khi nó không có hàng. Trên cơ sở này, bạn có thể sử dụng các mục sau sẽ hoạt động theo nhiều hàng bạn có (và cũng chiếm nhiều tbodyyếu tố):

$('#myTable > tbody:last-child').append('<tr>...</tr><tr>...</tr>');

6
@Rama, không, nó sẽ không. Cần phải có một giải pháp tốt hơn.
Brian Liang

40
Sẽ luôn có một người trong DOM.
mí mắt

4
một tbody trống không xác thực html của bạn mặc dù
2ni

40
Một cải tiến nhỏ cho giải pháp tốt đẹp khác là tối ưu hóa các bộ chọn. Bạn có thể nhận được cải tiến tốc độ với: $('#myTable').find('tbody:last')thay vì $('#myTable > tbody:last').
Erik Töyrä Silfverswärd

2
"Mí mắt tạo ra một nhận xét tốt rằng sẽ luôn có một người trong DOM" - Tôi chỉ thử điều này mà không có ai và nó không hoạt động - nó chỉ hoạt động nếu có một người.
BrainSlugs83

771

jQuery có một tiện ích tích hợp sẵn để thao tác các phần tử DOM một cách nhanh chóng.

Bạn có thể thêm bất cứ điều gì vào bảng của bạn như thế này:

$("#tableID").find('tbody')
    .append($('<tr>')
        .append($('<td>')
            .append($('<img>')
                .attr('src', 'img.png')
                .text('Image cell')
            )
        )
    );

Các $('<some-tag>')điều trong jQuery là một đối tượng thẻ mà có thể có một vài attrthuộc tính có thể được thiết lập và nhận được, cũng như text, đại diện cho văn bản giữa các thẻ ở đây: <tag>text</tag>.

Đây là một số thụt lề khá kỳ lạ, nhưng bạn sẽ dễ dàng thấy những gì đang diễn ra trong ví dụ này.


60
Đối với những người đang thử điều này, hãy lưu ý cẩn thận vị trí của dấu ngoặc đơn. Làm tổ đúng cách là rất quan trọng.
Ryan Lundy

9
Còn các thẻ đóng thì sao? Họ không cần thiết?
senfo

9
Không nên $ ("# tableClassname") thực sự là $ ("# tableID") vì biểu tượng băm đề cập đến ID chứ không phải tên lớp?
Dave

7
Tôi ghét chuỗi xích kỳ lạ như vậy. Đó là một cơn ác mộng để duy trì mã đầy đủ những điều như vậy.
bancer

4
@senfo thêm các phần tử con sẽ tự động tạo các phần tử đó.
Michel de Ruiter

308

Vì vậy, mọi thứ đã thay đổi kể từ khi @Luke Bennett trả lời câu hỏi này. Đây là một bản cập nhật.

jQuery kể từ phiên bản 1.4 (?) tự động phát hiện nếu các yếu tố bạn đang cố gắng để chèn (sử dụng bất kỳ append(), prepend(), before(), hoặc after()phương pháp) là một <tr>và chèn nó vào đầu tiên <tbody>trong bảng của bạn hoặc kết thúc tốt đẹp nó thành một mới <tbody>nếu người ta không làm hiện hữu.

Vì vậy, có mã ví dụ của bạn được chấp nhận và sẽ hoạt động tốt với jQuery 1.4+. ;)

$('#myTable').append('<tr><td>my data</td><td>more data</td></tr>');

2
Hãy cẩn thận với giả định này. Nếu đánh dấu được nối thêm của bạn bắt đầu bằng \ n hoặc \ n \ r, jQuery sẽ không phát hiện ra rằng đó là <tr> và sẽ nối nó vào <bảng> chứ không phải <tbody>. Tôi vừa gặp phải điều này với đánh dấu được tạo bởi một khung nhìn MVC có thêm một dòng ở đầu.
Mik

@Mik cảm ơn vì đã ngẩng cao đầu! Tôi đoán yourString.trim()có thể khắc phục điều này.
Salman von Abbas

Tất nhiên, nhưng bạn phải suy nghĩ về nó. Tốt hơn nên tập thói quen gắn vào <tbody> nếu bạn biết có.
Mik

jQuery 3.1 vẫn yêu cầu một tbody được chỉ định. Kiểm tra nó ở đây: jsfiddle.net/umaj5zz9/2
user984003

Điều này khiến trang của tôi được làm mới. Làm thế nào tôi có thể ngăn chặn điều đó?
Avi

168

Điều gì nếu bạn có một <tbody>và một <tfoot>?

Nhu la:

<table>
    <tbody>
        <tr><td>Foo</td></tr>
    </tbody>
    <tfoot>
        <tr><td>footer information</td></tr>
    </tfoot>
</table>

Sau đó, nó sẽ chèn hàng mới của bạn vào phần chân trang - không phải cho phần thân.

Do đó, giải pháp tốt nhất là bao gồm một <tbody>thẻ và sử dụng .append, chứ không phải .after.

$("#myTable > tbody").append("<tr><td>row content</td></tr>");

10
Bạn đã thực hiện bàn chân của bạn không chính xác. Nó nên đến trước tbody, không phải sau - xem w3.org/TR/html4/struct/tables.html#h-11.2.3 . Do đó, giải pháp của tôi vẫn hoạt động trừ khi bạn chọn phá vỡ các tiêu chuẩn (trong trường hợp đó bạn có thể mong đợi những điều khác cũng xảy ra). Giải pháp của tôi cũng hoạt động cho dù bạn có người thân hay không, trong khi đề xuất của bạn sẽ thất bại nếu không có người thân.
Luke Bennett

6
Mặc dù có bất kỳ sai lầm nào trong <t feet />, đây là một giải pháp tốt hơn. Nếu không có <tbody />, bạn có thể sử dụng kỹ thuật tương tự trên chính <bảng />. Trong khi đó "câu trả lời được chấp nhận" yêu cầu kiểm tra bổ sung để xem liệu có hàng hiện có hay không. (Tôi biết OP không nói rõ yêu cầu này, nhưng nó không quan trọng -. Bài này đi lên 1st trên một tìm kiếm Google cho kỹ thuật này, và câu trả lời tốt nhất không phải là trên cùng)
CleverPatrick

5
Đây là một giải pháp tốt hơn tìm thấy. Trong một số lần lặp lại, kỹ thuật này dường như luôn hoạt động. Là một FYI được thêm vào, bạn có thể sử dụng .prepend để thêm hàng vào đầu bảng trong khi .append đặt hàng ở cuối bảng.
Lance Cleveland

Điều này là không chính xác, nó sẽ nối hàng vào mỗi hàng trong tbody
garg10may

@ garg10may Bạn có thể tư vấn làm thế nào? Nó đang nhắm mục tiêu tbody, không phải bất kỳ yếu tố con.
ChadT

64

Tôi biết bạn đã yêu cầu một phương thức jQuery. Tôi đã xem xét rất nhiều và thấy rằng chúng ta có thể làm điều đó theo cách tốt hơn là sử dụng JavaScript trực tiếp bằng chức năng sau.

tableObject.insertRow(index)

indexlà một số nguyên chỉ định vị trí của hàng cần chèn (bắt đầu từ 0). Giá trị -1 cũng có thể được sử dụng; kết quả là hàng mới sẽ được chèn vào vị trí cuối cùng.

Tham số này là bắt buộc trong Firefox và Opera , nhưng nó là tùy chọn trong Internet Explorer, ChromeSafari .

Nếu tham số này bị bỏ qua, hãy insertRow()chèn một hàng mới ở vị trí cuối cùng trong Internet Explorer và ở vị trí đầu tiên trong Chrome và Safari.

Nó sẽ hoạt động cho mọi cấu trúc có thể chấp nhận của bảng HTML.

Ví dụ sau sẽ chèn một hàng cuối cùng (-1 được sử dụng làm chỉ mục):

<html>
    <head>
        <script type="text/javascript">
        function displayResult()
        {
            document.getElementById("myTable").insertRow(-1).innerHTML = '<td>1</td><td>2</td>';
        }
        </script>
    </head>

    <body>       
        <table id="myTable" border="1">
            <tr>
                <td>cell 1</td>
                <td>cell 2</td>
            </tr>
            <tr>
                <td>cell 3</td>
                <td>cell 4</td>
            </tr>
        </table>
        <br />
        <button type="button" onclick="displayResult()">Insert new row</button>            
    </body>
</html>

Tôi hy vọng nó sẽ giúp.


2
vấn đề với phương pháp này (như tôi vừa tìm ra) là nếu bạn có chân trang, nó sẽ thêm SAU chân trang với chỉ số -1 làm chỉ mục.
kdub

35

Tôi đề nghị

$('#myTable > tbody:first').append('<tr>...</tr><tr>...</tr>'); 

như trái ngược với

$('#myTable > tbody:last').append('<tr>...</tr><tr>...</tr>'); 

Các từ khóa firstlasthoạt động trên thẻ đầu tiên hoặc cuối cùng được bắt đầu, không bị đóng. Do đó, cái này chơi đẹp hơn với các bảng lồng nhau, nếu bạn không muốn thay đổi bảng lồng nhau, mà thay vào đó hãy thêm vào bảng tổng thể. Ít nhất, đây là những gì tôi tìm thấy.

<table id=myTable>
  <tbody id=first>
    <tr><td>
      <table id=myNestedTable>
        <tbody id=last>
        </tbody>
      </table>
    </td></tr>
  </tbody>
</table>

32

Theo tôi cách nhanh nhất và rõ ràng là

//Try to get tbody first with jquery children. works faster!
var tbody = $('#myTable').children('tbody');

//Then if no tbody just select your table 
var table = tbody.length ? tbody : $('#myTable');

//Add row
table.append('<tr><td>hello></td></tr>');

đây là bản demo Fiddle

Ngoài ra tôi có thể đề xuất một hàm nhỏ để thực hiện nhiều thay đổi html hơn

//Compose template string
String.prototype.compose = (function (){
var re = /\{{(.+?)\}}/g;
return function (o){
        return this.replace(re, function (_, k){
            return typeof o[k] != 'undefined' ? o[k] : '';
        });
    }
}());

Nếu bạn sử dụng trình soạn thảo chuỗi của tôi, bạn có thể làm điều này như

var tbody = $('#myTable').children('tbody');
var table = tbody.length ? tbody : $('#myTable');
var row = '<tr>'+
    '<td>{{id}}</td>'+
    '<td>{{name}}</td>'+
    '<td>{{phone}}</td>'+
'</tr>';


//Add row
table.append(row.compose({
    'id': 3,
    'name': 'Lee',
    'phone': '123 456 789'
}));

Dưới đây là bản demo Fiddle


Nếu bạn có nhiều tbodybạn có thể nhận được nhiều phần chèn
Mark Schultheiss

Có, bạn có thể :) Bạn có thể cố gắng $("SELECTOR").last()giới hạn bộ sưu tập thẻ của mình
hờn dỗi nhất

23

Điều này có thể được thực hiện dễ dàng bằng cách sử dụng hàm "last ()" của jQuery.

$("#tableId").last().append("<tr><td>New row</td></tr>");

9
Ý tưởng hay, nhưng tôi nghĩ rằng bạn muốn thay đổi bộ chọn thành #tableId tr như bây giờ, bạn sẽ nhận được bảng thêm hàng bên dưới bảng.
Darryl Hein

17

Tôi đang sử dụng cách này khi không có bất kỳ hàng nào trong bảng, cũng như, mỗi hàng khá phức tạp.

style.css:

...
#templateRow {
  display:none;
}
...

xxx.html

...
<tr id="templateRow"> ... </tr>
...

$("#templateRow").clone().removeAttr("id").appendTo( $("#templateRow").parent() );

...

Cảm ơn bạn. Đây là giải pháp rất thanh lịch. Tôi thích cách nó giữ mẫu trong lưới. Nó làm cho mã đơn giản hơn nhiều và dễ đọc và bảo trì hơn. Cảm ơn một lần nữa.
Rodney

14

Đối với giải pháp tốt nhất được đăng ở đây, nếu có một bảng lồng trên hàng cuối cùng, hàng mới sẽ được thêm vào bảng lồng thay vì bảng chính. Một giải pháp nhanh chóng (xem xét các bảng có / không có tbody và các bảng có các bảng lồng nhau):

function add_new_row(table, rowcontent) {
    if ($(table).length > 0) {
        if ($(table + ' > tbody').length == 0) $(table).append('<tbody />');
        ($(table + ' > tr').length > 0) ? $(table).children('tbody:last').children('tr:last').append(rowcontent): $(table).children('tbody:last').append(rowcontent);
    }
}

Ví dụ sử dụng:

add_new_row('#myTable','<tr><td>my new row</td></tr>');

14

Tôi đã giải quyết nó theo cách này.

Sử dụng jquery

$('#tab').append($('<tr>')
    .append($('<td>').append("text1"))
    .append($('<td>').append("text2"))
    .append($('<td>').append("text3"))
    .append($('<td>').append("text4"))
  )

Đoạn trích

$('#tab').append($('<tr>')
  .append($('<td>').append("text1"))
  .append($('<td>').append("text2"))
  .append($('<td>').append("text3"))
  .append($('<td>').append("text4"))
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<table id="tab">
  <tr>
    <th>Firstname</th>
    <th>Lastname</th> 
    <th>Age</th>
    <th>City</th>
  </tr>
  <tr>
    <td>Jill</td>
    <td>Smith</td> 
    <td>50</td>
    <td>New York</td>
  </tr>
</table>


Tôi thành công có thể thêm dữ liệu động trong một hàng mới bây giờ nhưng sau khi sử dụng phương pháp này, bộ lọc tùy chỉnh của tôi không ..Do làm việc bạn có bất kỳ giải pháp cho rằng T hank bạn
Arjun

Tôi nghĩ rằng bạn cần phải gọi một chức năng cập nhật của một số loại. Hade để nói mà không có một ví dụ.
Anton BBR

13

Tôi đã gặp một số vấn đề liên quan, cố gắng chèn một hàng của bảng sau khi hàng được nhấp. Tất cả đều ổn ngoại trừ lệnh .after () không hoạt động cho hàng cuối cùng.

$('#traffic tbody').find('tr.trafficBody).filter(':nth-child(' + (column + 1) + ')').after(insertedhtml);

Tôi đã đáp ứng với một giải pháp rất gọn gàng:

tạo bảng như sau (id cho mỗi hàng):

<tr id="row1"> ... </tr>
<tr id="row2"> ... </tr>
<tr id="row3"> ... </tr>

Vân vân ...

và sau đó :

$('#traffic tbody').find('tr.trafficBody' + idx).after(html);

Tôi nghĩ rằng đây nên là một câu hỏi mới, thay vì một câu trả lời cho một câu hỏi hiện có ...
Darryl Hein

11

Bạn có thể sử dụng hàm jQuery thêm bảng tuyệt vời này . Nó hoạt động tuyệt vời với các bảng có <tbody>và không. Ngoài ra, cần phải xem xét colspan của hàng cuối bảng của bạn.

Dưới đây là một ví dụ sử dụng:

// One table
addTableRow($('#myTable'));
// add table row to number of tables
addTableRow($('.myTables'));

Tôi không thể thấy rằng nó rất hữu ích. Tất cả những gì nó làm là thêm một hàng bảng trống vào một bảng. Thông thường, nếu không phải luôn luôn, bạn muốn thêm một hàng bảng mới với một số dữ liệu trong đó.
Darryl Hein

1
Nhưng đó thường là những gì bạn muốn. Hàm này cho phép bạn thêm en hàng trống vào bất kỳ bảng nào của bạn, bất kể bạn có bao nhiêu cột và hàng kéo dài, do đó làm cho nó trở thành hàm UNIVERSAL. Bạn có thể tiếp tục từ đó với ví dụ với $ ('. Tbl tr: last td'). Toàn bộ vấn đề là có chức năng phổ quát !!!
Uzbekjon

Nếu chức năng của bạn cũng thêm dữ liệu vào các hàng mới của bạn, bạn sẽ không thể sử dụng nó vào lần tiếp theo trong dự án tiếp theo của bạn. Điểm gì?! Tuy nhiên, theo ý kiến ​​của tôi, bạn không cần phải chia sẻ nó ...
Uzbekjon

Nếu bạn đề xuất chức năng không phải là một phần của gói chung, vui lòng đặt mã chức năng đầy đủ ở đây. Cảm ơn bạn.
Yevgeniy Afanasyev

10

Giải pháp của tôi:

//Adds a new table row
$.fn.addNewRow = function (rowId) {
    $(this).find('tbody').append('<tr id="' + rowId + '"> </tr>');
};

sử dụng:

$('#Table').addNewRow(id1);

Vậy nếu không có tbodytrong bảng .. ?? có nghĩa là có thể có hàng trực tiếp bên trong <table>phần tử, ngay cả khi không có bất kỳ tiêu đề nào.
shashwat

Tôi thực sự khuyên bạn nên đánh dấu bằng <TBody> để đạt tiêu chuẩn HTML 5, nếu không thì bạn luôn có thể thực hiện $ (this) .append ('<tr id = "' + rowId + '"> </ tr> '); chỉ thêm một hàng trong bảng.
Ricky G

Tôi nghĩ rằng nếu bạn định biến nó thành một hàm thì có lẽ bạn có thể trả về một đối tượng jQuery cho hàng mới để nó có thể kết nối được.
Hỗn loạn

10
    // Create a row and append to table
    var row = $('<tr />', {})
        .appendTo("#table_id");

    // Add columns to the row. <td> properties can be given in the JSON
    $('<td />', {
        'text': 'column1'
    }).appendTo(row);

    $('<td />', {
        'text': 'column2',
        'style': 'min-width:100px;'
    }).appendTo(row);

Mặc dù đây có thể là một câu trả lời, nhưng nó không hữu ích cho khách truy cập sau này ... Vui lòng thêm một số lời giải thích xung quanh câu trả lời của bạn.
Jayan

9

Câu trả lời của Neil là câu trả lời hay nhất. Tuy nhiên mọi thứ trở nên lộn xộn rất nhanh. Đề xuất của tôi sẽ là sử dụng các biến để lưu trữ các phần tử và nối chúng vào hệ thống phân cấp DOM.

HTML

<table id="tableID">
    <tbody>
    </tbody>
</table>

JAVASCRIPT

// Reference to the table body
var body = $("#tableID").find('tbody');

// Create a new row element
var row = $('<tr>');

// Create a new column element
var column = $('<td>');

// Create a new image element
var image = $('<img>');
image.attr('src', 'img.png');
image.text('Image cell');

// Append the image to the column element
column.append(image);
// Append the column to the row element
row.append(column);
// Append the row to the table body
body.append(row);

9
<table id="myTable">
  <tbody>
    <tr>...</tr>
    <tr>...</tr>
  </tbody>
  <tr>...</tr>
</table>

Viết với chức năng javascript

document.getElementById("myTable").insertRow(-1).innerHTML = '<tr>...</tr><tr>...</tr>';


7

Dưới đây là một số mã hack hqueti. Tôi muốn duy trì một mẫu hàng trong một trang HTML . Các hàng của bảng 0 ... n được hiển thị tại thời điểm yêu cầu và ví dụ này có một hàng được mã hóa cứng và một hàng mẫu được đơn giản hóa. Bảng mẫu bị ẩn và thẻ hàng phải nằm trong một bảng hợp lệ hoặc các trình duyệt có thể thả nó khỏi cây DOM . Thêm một hàng sử dụng bộ nhận dạng bộ đếm + 1 và giá trị hiện tại được duy trì trong thuộc tính dữ liệu. Nó đảm bảo mỗi hàng có các tham số URL duy nhất .

Tôi đã chạy thử nghiệm trên Internet Explorer 8, Internet Explorer 9, Firefox, Chrome, Opera, Nokia Lumia 800 , Nokia C7 (với Symbian 3), chứng khoán Android và trình duyệt Firefox beta.

<table id="properties">
<tbody>
  <tr>
    <th>Name</th>
    <th>Value</th>
    <th>&nbsp;</th>
  </tr>
  <tr>
    <td nowrap>key1</td>
    <td><input type="text" name="property_key1" value="value1" size="70"/></td>
    <td class="data_item_options">
       <a class="buttonicon" href="javascript:deleteRow()" title="Delete row" onClick="deleteRow(this); return false;"></a>
    </td>
  </tr>
</tbody>
</table>

<table id="properties_rowtemplate" style="display:none" data-counter="0">
<tr>
 <td><input type="text" name="newproperty_name_\${counter}" value="" size="35"/></td>
 <td><input type="text" name="newproperty_value_\${counter}" value="" size="70"/></td>
 <td><a class="buttonicon" href="javascript:deleteRow()" title="Delete row" onClick="deleteRow(this); return false;"></a></td>
</tr>
</table>
<a class="action" href="javascript:addRow()" onclick="addRow('properties'); return false" title="Add new row">Add row</a><br/>
<br/>

- - - - 
// add row to html table, read html from row template
function addRow(sTableId) {
    // find destination and template tables, find first <tr>
    // in template. Wrap inner html around <tr> tags.
    // Keep track of counter to give unique field names.
    var table  = $("#"+sTableId);
    var template = $("#"+sTableId+"_rowtemplate");
    var htmlCode = "<tr>"+template.find("tr:first").html()+"</tr>";
    var id = parseInt(template.data("counter"),10)+1;
    template.data("counter", id);
    htmlCode = htmlCode.replace(/\${counter}/g, id);
    table.find("tbody:last").append(htmlCode);
}

// delete <TR> row, childElem is any element inside row
function deleteRow(childElem) {
    var row = $(childElem).closest("tr"); // find <tr> parent
    row.remove();
}

PS: Tôi cung cấp tất cả các khoản tín dụng cho nhóm jQuery; họ xứng đáng với mọi thứ Lập trình JavaScript mà không có jQuery - Tôi thậm chí không muốn nghĩ về cơn ác mộng đó.


7
<tr id="tablerow"></tr>

$('#tablerow').append('<tr>...</tr><tr>...</tr>');

7

Tôi đoán tôi đã thực hiện trong dự án của mình, đây là:

html

<div class="container">
    <div class = "row">
    <div class = "span9">
        <div class = "well">
          <%= form_for (@replication) do |f| %>
    <table>
    <tr>
      <td>
          <%= f.label :SR_NO %>
      </td>
      <td>
          <%= f.text_field :sr_no , :id => "txt_RegionName" %>
      </td>
    </tr>
    <tr>
      <td>
        <%= f.label :Particular %>
      </td>
      <td>
        <%= f.text_area :particular , :id => "txt_Region" %>
      </td>
    </tr>
    <tr>
      <td>
        <%= f.label :Unit %>
      </td>
      <td>
        <%= f.text_field :unit ,:id => "txt_Regio" %>
      </td>
      </tr>
      <tr>

      <td> 
        <%= f.label :Required_Quantity %>
      </td>
      <td>
        <%= f.text_field :quantity ,:id => "txt_Regi" %>
      </td>
    </tr>
    <tr>
    <td></td>
    <td>
    <table>
    <tr><td>
    <input type="button"  name="add" id="btn_AddToList" value="add" class="btn btn-primary" />
    </td><td><input type="button"  name="Done" id="btn_AddToList1" value="Done" class="btn btn-success" />
    </td></tr>
    </table>
    </td>
    </tr>
    </table>
    <% end %>
    <table id="lst_Regions" style="width: 500px;" border= "2" class="table table-striped table-bordered table-condensed">
    <tr>
    <td>SR_NO</td>
    <td>Item Name</td>
    <td>Particular</td>
    <td>Cost</td>
    </tr>
    </table>
    <input type="button" id= "submit" value="Submit Repication"  class="btn btn-success" />
    </div>
    </div>
    </div>
</div>

js

$(document).ready(function() {     
    $('#submit').prop('disabled', true);
    $('#btn_AddToList').click(function () {
     $('#submit').prop('disabled', true);
    var val = $('#txt_RegionName').val();
    var val2 = $('#txt_Region').val();
    var val3 = $('#txt_Regio').val();
    var val4 = $('#txt_Regi').val();
    $('#lst_Regions').append('<tr><td>' + val + '</td>' + '<td>' + val2 + '</td>' + '<td>' + val3 + '</td>' + '<td>' + val4 + '</td></tr>');
    $('#txt_RegionName').val('').focus();
    $('#txt_Region').val('');
        $('#txt_Regio').val('');
        $('#txt_Regi').val('');
    $('#btn_AddToList1').click(function () {
         $('#submit').prop('disabled', false).addclass('btn btn-warning');
    });
      });
});

7

Đây là giải pháp của tôi

$('#myTable').append('<tr><td>'+data+'</td><td>'+other data+'</td>...</tr>');

7

nếu bạn có một biến khác, bạn có thể truy cập vào <td>thẻ như thế.

Bằng cách này tôi hy vọng nó sẽ hữu ích

var table = $('#yourTableId');
var text  = 'My Data in td';
var image = 'your/image.jpg'; 
var tr = (
  '<tr>' +
    '<td>'+ text +'</td>'+
    '<td>'+ text +'</td>'+
    '<td>'+
      '<img src="' + image + '" alt="yourImage">'+
    '</td>'+
  '</tr>'
);

$('#yourTableId').append(tr);

6

Vì tôi cũng đã có một cách quá thêm hàng cuối cùng hoặc bất kỳ địa điểm cụ thể nào nên tôi nghĩ tôi cũng nên chia sẻ điều này:

Đầu tiên tìm ra chiều dài hoặc hàng:

var r=$("#content_table").length;

và sau đó sử dụng mã dưới đây để thêm hàng của bạn:

$("#table_id").eq(r-1).after(row_html);

6

Để thêm một ví dụ tốt về chủ đề, đây là giải pháp làm việc nếu bạn cần thêm một hàng ở vị trí cụ thể.

Hàng bổ sung được thêm sau hàng thứ 5 hoặc ở cuối bảng nếu có ít hơn 5 hàng.

var ninja_row = $('#banner_holder').find('tr');

if( $('#my_table tbody tr').length > 5){
    $('#my_table tbody tr').filter(':nth-child(5)').after(ninja_row);
}else{
    $('#my_table tr:last').after(ninja_row);
}

Tôi đặt nội dung trên một thùng chứa sẵn sàng (ẩn) bên dưới bảng .. vì vậy nếu bạn (hoặc nhà thiết kế) phải thay đổi thì không bắt buộc phải chỉnh sửa JS.

<table id="banner_holder" style="display:none;"> 
    <tr>
        <td colspan="3">
            <div class="wide-banner"></div>
        </td>   
    </tr> 
</table>

6
<table id=myTable>
    <tr><td></td></tr>
    <style="height=0px;" tfoot></tfoot>
</table>

Bạn có thể lưu trữ bộ đệm chân trang và giảm quyền truy cập vào DOM (Lưu ý: có thể tốt hơn là sử dụng hàng giả thay vì chân trang).

var footer = $("#mytable tfoot")
footer.before("<tr><td></td></tr>")

5
$('#myTable').append('<tr><td>my data</td><td>more data</td></tr>');

sẽ thêm một hàng mới vào đầu tiên TBODY của bảng, mà không phụ thuộc vào bất kỳ THEADhoặc TFOOThiện tại. (Tôi không tìm thấy thông tin từ phiên bản jQuery nào có .append()hành vi này.)

Bạn có thể thử nó trong các ví dụ sau:

<table class="t"> <!-- table with THEAD, TBODY and TFOOT -->
<thead>
  <tr><th>h1</th><th>h2</th></tr>
</thead>
<tbody>
  <tr><td>1</td><td>2</td></tr>
</tbody>
<tfoot>
  <tr><th>f1</th><th>f2</th></tr>
</tfoot>
</table><br>

<table class="t"> <!-- table with two TBODYs -->
<thead>
  <tr><th>h1</th><th>h2</th></tr>
</thead>
<tbody>
  <tr><td>1</td><td>2</td></tr>
</tbody>
<tbody>
  <tr><td>3</td><td>4</td></tr>
</tbody>
<tfoot>
  <tr><th>f1</th><th>f2</th></tr>
</tfoot>
</table><br>

<table class="t">  <!-- table without TBODY -->
<thead>
  <tr><th>h1</th><th>h2</th></tr>
</thead>
</table><br>

<table class="t">  <!-- table with TR not in TBODY  -->
  <tr><td>1</td><td>2</td></tr>
</table>
<br>
<table class="t">
</table>

<script>
$('.t').append('<tr><td>a</td><td>a</td></tr>');
</script>

Trong đó a bhàng mẫu được chèn sau 1 2, không phải sau 3 4ví dụ thứ hai. Nếu bảng trống, jQuery tạo TBODYcho một hàng mới.


5

Nếu bạn đang sử dụng plugin Datable JQuery, bạn có thể thử.

oTable = $('#tblStateFeesSetup').dataTable({
            "bScrollCollapse": true,
            "bJQueryUI": true,
            ...
            ...
            //Custom Initializations.
            });

//Data Row Template of the table.
var dataRowTemplate = {};
dataRowTemplate.InvoiceID = '';
dataRowTemplate.InvoiceDate = '';
dataRowTemplate.IsOverRide = false;
dataRowTemplate.AmountOfInvoice = '';
dataRowTemplate.DateReceived = '';
dataRowTemplate.AmountReceived = '';
dataRowTemplate.CheckNumber = '';

//Add dataRow to the table.
oTable.fnAddData(dataRowTemplate);

Tham khảo API dữ liệu fnAddData Datatables


5

Một cách đơn giản:

$('#yourTableId').append('<tr><td>your data1</td><td>your data2</td><td>your data3</td></tr>');

Bạn có thể vui lòng giải thích thêm câu trả lời của bạn thêm một chút mô tả về giải pháp bạn cung cấp không?
abarisone

4

Hãy thử điều này: cách rất đơn giản

$('<tr><td>3</td></tr><tr><td>4</td></tr>').appendTo("#myTable tbody");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<table id="myTable">
  <tbody>
    <tr><td>1</td></tr>
    <tr><td>2</td></tr>
  </tbody>
</table>

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.