วิธีแทรกแถวในเนื้อหาตาราง HTML ใน JavaScript


135

ฉันมีตาราง HTML ที่มีส่วนหัวและส่วนท้าย:

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

ฉันกำลังพยายามเพิ่มแถวtbodyด้วยสิ่งต่อไปนี้:

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

แต่มีการเพิ่มแถวในtfootส่วนนี้

ฉันจะแทรกได้tbodyอย่างไร?


คำตอบ:


216

หากคุณต้องการเพิ่มแถวลงในtbodyให้รับข้อมูลอ้างอิงและเพิ่มแถวนั้น

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

การสาธิตการทำงานเป็นที่นี่ นอกจากนี้คุณยังสามารถตรวจสอบเอกสารของที่นี่insertRow


3
รหัสของฉันแตกเนื่องจาก: ไม่สามารถอ่านคุณสมบัติ 'insertRow' ของ null ข้อเสนอแนะใด ๆ ?
Vrankela

1
@Vrankela: ตัวเลือกของคุณอาจไม่ถูกต้อง (บรรทัดแรกในตัวอย่าง)
Christian Strempfer

2
ข้างต้นจะล้มเหลวในครั้งแรก แทนที่จะตรวจสอบว่าไม่มีแถว: var แถว = tableRef.rows; var แถวSoFar = (แถว == null)? 0: rows.length; var newRow = tableRef.insertRow (rowSoFar);
Inor

ขอบคุณโจนาธานวิธีเพิ่มสไตล์ css ลงใน textnote
NguyễnThắng

2
แทนการtableRef.insertRow(tableRef.rows.length);ที่คุณสามารถใช้งานง่ายtableRef.insertRow(-1);ที่จะแทรกแถวในตอนท้ายของตาราง
jeanggi90

32

คุณสามารถลองใช้ตัวอย่างต่อไปนี้โดยใช้jQuery :

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

22
บางทีคุณอาจจะพูดถูก แต่บางครั้งคุณจำเป็นต้องรู้ของจริง :) และอย่างที่บอกว่าควรรู้ JavaScript ก่อนการใช้ไลบรารีใด ๆ โดยไม่ต้องรู้สึกลำบาก;)
Marwan

อย่าลืมเครื่องหมายจุลภาคใน 'tbody' !! $(table).find('tbody').append( "<tr><td>aaaa</td></tr>" );
Heitor

ฉันพยายามใช้คำตอบของคุณกับกรณีของฉัน แต่ทำไม่ได้ฉันจึงโพสต์คำถามใหม่คุณคิดว่าคุณสามารถตอบได้และช่วยฉันได้ไหม ► stackoverflow.com/q/63194846/3298930
Jose Manuel Abarca Rodríguez

13

แนวทางพื้นฐาน:

ควรเพิ่มเนื้อหาที่จัดรูปแบบ HTML และแสดงแถวที่เพิ่มใหม่

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

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

2
ทางออกที่ฉันชอบ: หรูหรามากและเพิ่มความยืดหยุ่นในการเพิ่ม HTML ภายใน
jimiayler

9

คุณใกล้แล้ว เพียงแค่เพิ่มแถวtbodyแทนtable:

myTbody.insertRow();

เพียงแค่ได้รับการอ้างอิงถึงtBody(myTbody ) ก่อนใช้งาน สังเกตว่าคุณไม่จำเป็นต้องผ่านตำแหน่งสุดท้ายในตาราง จะอยู่ในตำแหน่งที่สิ้นสุดโดยอัตโนมัติเมื่อละเว้นอาร์กิวเมนต์

การสาธิตสดที่ jsFiddle


6

ฉันคิดว่าสคริปต์นี้เป็นสิ่งที่คุณต้องการจริงๆ

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

แน่นอนคุณต้องแก้ไขแถวใหม่ของคุณ แต่ฉันเพิ่งเสนอแนวคิดในคำตอบและทิ้งส่วนที่เหลือไว้ให้คุณ :)
Marwan

4

เพิ่มแถว:

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

และเซลล์ต่างๆ


7
ฉันคิดว่าคุณควรใช้ตัวแปรที่เหมาะสมกว่านี้เมื่อสร้างตัวอย่าง
Uriahs Victor

2

ฉันได้ลองแล้วและสิ่งนี้ใช้ได้ผลสำหรับฉัน:

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

2
แล้วถ้าส่วนท้ายมี 2 แถวล่ะ?
Jérôme Verstrynge

1
ตกลงง่ายๆให้เป็น var row = table.insertRow (0); มันจะเพิ่มแถวที่ด้านบนสุด
Pandiyan Cool

@JVerstry tbody: นี่คือสิ่งที่mozilla
e2-e4

1

คุณสามารถใช้ตัวอย่างต่อไปนี้:

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

ไฟล์ 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

เพิ่มคอลัมน์เพิ่มแถวลบคอลัมน์และลบแถว

วิธีที่ง่ายที่สุด

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>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.