Cách chèn một hàng trong thân bảng HTML bằng JavaScript


133

Tôi có một bảng HTML với một tiêu đề và chân trang:

<table id="myTable">
    <thead>
        <tr>
            <th>My Header</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>aaaaa</td>
        </tr>
    </tbody>
    <tfoot>
        <tr>
            <td>My footer</td>
        </tr>
    <tfoot>
</table>

Tôi đang cố gắng thêm một hàng tbodyvới những điều sau đây:

myTable.insertRow(myTable.rows.length - 1);

nhưng hàng được thêm vào trong tfootphần.

Làm thế nào để tôi chèn tbody?


Câu trả lời:


215

Nếu bạn muốn thêm một hàng vào tbody, hãy tham khảo nó và thêm nó vào đó.

var tableRef = document.getElementById('myTable').getElementsByTagName('tbody')[0];

// Insert a row in the table at the last row
var newRow   = tableRef.insertRow();

// Insert a cell in the row at index 0
var newCell  = newRow.insertCell(0);

// Append a text node to the cell
var newText  = document.createTextNode('New row');
newCell.appendChild(newText);

Một bản demo làm việc ở đây . Ngoài ra, bạn có thể kiểm tra các tài liệu insertRow ở đây .


3
Mã của tôi bị hỏng vì: Không thể đọc thuộc tính 'insertRow' của null. Bất kỳ đề xuất?
— Vrankela

1
@Vrankela: Có thể bộ chọn của bạn không chính xác (ví dụ dòng đầu tiên).
— Christian Strempfer

2
ở trên sẽ thất bại lần đầu tiên. thay vì kiểm tra nếu không có hàng: var rows = tableRef.rows; var rowsSoFar = (rows == null)? 0: hàng.length; var newRow = tableRef.insertRow (rowsSoFar);
— vào

Cảm ơn Jonathan, Làm thế nào để thêm phong cách css vào textnote?
— Nguyễn Thắng

2
Thay vì tableRef.insertRow(tableRef.rows.length);bạn có thể sử dụng đơn giản tableRef.insertRow(-1);để chèn hàng ở cuối bảng.
— jeanggi90

32

Bạn có thể thử đoạn mã sau bằng jQuery :

$(table).find('tbody').append("<tr><td>aaaa</td></tr>");

22
có thể bạn đúng nhưng đôi khi bạn cần biết những thứ thực sự :) và như tôi nói luôn biết JavaScript trước khi sử dụng bất kỳ thư viện nào không có cảm giác khó chịu;)
— Marwan

Vâng, đừng quên dấu phẩy trong 'tbody' !! $(table).find('tbody').append( "<tr><td>aaaa</td></tr>" );
— Heitor

13

Cách tiếp cận cơ bản:

Điều này sẽ thêm nội dung được định dạng HTML và hiển thị hàng vừa được thêm.

var myHtmlContent = "<h3>hello</h3>"
var tableRef = document.getElementById('myTable').getElementsByTagName('tbody')[0];

var newRow = tableRef.insertRow(tableRef.rows.length);
newRow.innerHTML = myHtmlContent;

2
Giải pháp yêu thích của tôi: rất thanh lịch và có thêm tính linh hoạt để thêm HTML bên trong.
— jimiayler

9

Bạn đang ở gần. Chỉ cần thêm hàng vào tbodythay vì table:

myTbody.insertRow();

Chỉ cần tham khảo tBody( myTbody) trước khi sử dụng. Lưu ý rằng bạn không cần phải vượt qua vị trí cuối cùng trong một bảng; nó tự động định vị ở cuối khi bỏ qua đối số.

Một bản demo trực tiếp có tại jsFiddle .


6

Tôi nghĩ kịch bản này là chính xác những gì bạn cần

var t = document.getElementById('myTable');
var r =document.createElement('TR');
t.tBodies[0].appendChild(r)

tất nhiên bạn cần sửa đổi hàng mới của mình nhưng tôi chỉ đưa ra khái niệm trong câu trả lời và để phần còn lại cho bạn :)
— Marwan

4

Thêm hàng:

<html>
    <script>
        function addRow() {
            var table = document.getElementById('myTable');
            //var row = document.getElementById("myTable");
            var x = table.insertRow(0);
            var e = table.rows.length-1;
            var l = table.rows[e].cells.length;
            //x.innerHTML = "&nbsp;";

            for (var c=0, m=l; c < m; c++) {
                table.rows[0].insertCell(c);
                table.rows[0].cells[c].innerHTML = "&nbsp;&nbsp;";
            }
        }

        function addColumn() {
            var table = document.getElementById('myTable');
            for (var r = 0, n = table.rows.length; r < n; r++) {
                table.rows[r].insertCell(0);
                table.rows[r].cells[0].innerHTML = "&nbsp;&nbsp;";
            }
        }

        function deleteRow() {
            document.getElementById("myTable").deleteRow(0);
        }

        function deleteColumn() {
            // var row = document.getElementById("myRow");
            var table = document.getElementById('myTable');
            for (var r = 0, n = table.rows.length; r < n; r++) {
                table.rows[r].deleteCell(0); // var table handle
            }
        }
    </script>

    <body>
        <input type="button" value="row +" onClick="addRow()" border=0 style='cursor:hand'>
        <input type="button" value="row -" onClick='deleteRow()' border=0 style='cursor:hand'>
        <input type="button" value="column +" onClick="addColumn()" border=0 style='cursor:hand'>
        <input type="button" value="column -" onClick='deleteColumn()' border=0 style='cursor:hand'>

        <table  id='myTable' border=1 cellpadding=0 cellspacing=0>
            <tr id='myRow'>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
            </tr>
        </table>
    </body>
</html>

Và các tế bào.


7
Tôi nghĩ bạn nên sử dụng các biến hợp lý hơn khi tạo một ví dụ.
— Uriahs Victor

2

Tôi đã thử điều này, và điều này đang làm việc cho tôi:

var table = document.getElementById("myTable");
var row = table.insertRow(myTable.rows.length-2);
var cell1 = row.insertCell(0);

2
Và nếu chân trang có 2 hàng thì sao?
— Jérôme Verstrynge

1
Ok đơn giản làm cho nó là var row = table.insertRow (0); nó sẽ thêm hàng ở trên cùng
— Pandiyan Cool

@JVerstry tbody: đây chính xác là mozilla
— e2-e4

1

Bạn có thể sử dụng ví dụ sau:

<table id="purches">
    <thead>
        <tr>
            <th>ID</th>
            <th>Transaction Date</th>
            <th>Category</th>
            <th>Transaction Amount</th>
            <th>Offer</th>
        </tr>
    </thead>

    <!--  <tr th:each="person: ${list}"    >
            <td><li th:each="person: ${list}" th:text="|${person.description}|"></li></td>
            <td><li th:each="person: ${list}" th:text="|${person.price}|"></li></td>
            <td><li th:each="person: ${list}" th:text="|${person.available}|"></li></td>
            <td><li th:each="person: ${list}" th:text="|${person.from}|"></li></td>
            </tr>
    -->

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

Tệp JavaScript:

$.ajax({
    type: "POST",
    contentType: "application/json",
    url: "/search",
    data: JSON.stringify(search),
    dataType: 'json',
    cache: false,
    timeout: 600000,
    success: function (data) {
        //  var json = "<h4>Ajax Response</h4><pre>"  + JSON.stringify(data, null, 4) + "</pre>";
        // $('#feedback').html(json);
        //
        console.log("SUCCESS: ", data);
        //$("#btn-search").prop("disabled", false);

        for (var i = 0; i < data.length; i++) {
            //$("#feedback").append('<tr><td>' + data[i].accountNumber + '</td><td>' + data[i].category + '</td><td>' + data[i].ssn + '</td></tr>');
            $('#feedback').append('<tr><td>' + data[i].accountNumber + '</td><td>' + data[i].category + '</td><td>' + data[i].ssn + '</td><td>' + data[i].ssn + '</td><td>' + data[i].ssn + '</td></tr>');

            alert(data[i].accountNumber)
        }
    },
    error: function (e) {
        var json = "<h4>Ajax Response</h4><pre>" + e.responseText + "</pre>";
        $('#feedback').html(json);

        console.log("ERROR: ", e);
        $("#btn-search").prop("disabled", false);
    }
});

1

Thêm cột, thêm hàng, xóa cột và xóa hàng.

Cách đơn giản nhất

function addColumn(myTable) {
    var table = document.getElementById(myTable);
    var row = table.getElementsByTagName('tr');
    for (i=0; i<row.length; i++) {
        row[i].innerHTML = row[i].innerHTML + '<td></td>';
    }
}

function deleterow(tblId)
{
      var table = document.getElementById(tblId);
      var row = table.getElementsByTagName('tr');
      if (row.length != '1') {
          row[row.length - 1].outerHTML = '';
      }
}

function deleteColumn(tblId)
{
    var allRows = document.getElementById(tblId).rows;
    for (var i=0; i<allRows.length; i++) {
        if (allRows[i].cells.length > 1) {
            allRows[i].deleteCell(-1);
        }
    }
}

function myFunction(myTable) {
    var table = document.getElementById(myTable);
    var row = table.getElementsByTagName('tr');
    var row = row[row.length-1].outerHTML;
    table.innerHTML = table.innerHTML + row;
    var row = table.getElementsByTagName('tr');
    var row = row[row.length-1].getElementsByTagName('td');
    for(i=0; i<row.length; i++) {
        row[i].innerHTML = '';
    }
}
table, td {
    border: 1px solid black;
    border-collapse: collapse;
}
td {
    cursor: text;
    padding: 10px;
}
td:empty:after {
    content: "Type here...";
    color: #CCCCCC;
}
<!DOCTYPE html>
<html>
    <head>
    </head>

    <body>
        <form>
            <p>
            <input type="button" value="+Column" onclick="addColumn('tblSample')">
            <input type="button" value="-Column" onclick="deleteColumn('tblSample')">
            <input type="button" value="+Row" onclick="myFunction('tblSample')">
            <input type="button" value="-Row" onclick="deleterow('tblSample')">
            </p>
            <table><tbody id="tblSample" contenteditable><tr><td></td></tr></tbody></table>
        </form>
    </body>

</html>

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 cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.