【问题标题】:How to insert a row in an HTML table body in JavaScript如何在 JavaScript 中的 HTML 表格正文中插入一行
【发布时间】:2013-08-22 09:48:06
【问题描述】:

我有一个带有页眉和页脚的 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?

【问题讨论】:

标签: javascript html html-table insert row


【解决方案1】:

如果您想在tbody 中添加一行,请获取对其的引用并调用其insertRow 方法。

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

// Insert a row at the end of table
var newRow = tbodyRef.insertRow();

// Insert a cell at the end of the row
var newCell = newRow.insertCell();

// Append a text node to the cell
var newText = document.createTextNode('new row');
newCell.appendChild(newText);
<table id="myTable">
  <thead>
    <tr>
      <th>My Header</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>initial row</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <td>My Footer</td>
    </tr>
  </tfoot>
</table>

(JSFiddle 上的旧 demo)

【讨论】:

  • 我的代码中断是因为:无法读取 null 的属性“insertRow”。有什么建议吗?
  • @Vrankela:您的选择器可能不正确(示例中的第一行)。
  • 上述方法第一次会失败。而是检查是否没有行: var rows = tableRef.rows; var rowsSoFar = (rows==null) ? 0:行。长度; var newRow = tableRef.insertRow(rowsSoFar);
  • 谢谢乔纳森,如何在 textnote 中添加 css 样式?
  • 您可以简单地使用tableRef.insertRow(-1); 代替tableRef.insertRow(tableRef.rows.length); 在表格末尾插入行。
【解决方案2】:

您可以使用jQuery 尝试以下sn-p:

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

【讨论】:

  • 也许你是对的,但有时你需要知道真正的东西 :) 就像我说的,在使用任何库之前总是知道 JavaScript 没有难的感觉;)
  • 我正在尝试将您的答案应用于我的案例,但我做不到,所以我发布了一个新问题,您认为您可以回答并拯救我吗? ►stackoverflow.com/q/63194846/3298930.
  • 如果我想要一个变量来代替 aaaa,语法是什么?
  • ...apend("" + myVar + "");
【解决方案3】:

基本方法:

这应该会添加 HTML 格式的内容并显示新添加的行。

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

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

【讨论】:

  • 我最喜欢的解决方案:非常优雅,并且增加了添加内部 HTML 的灵活性。
  • 如果你为 tr 字符串提供了一个 id,那么它将删除它,所以请小心。
【解决方案4】:

你已经接近了。只需将该行添加到tbody 而不是table:

myTbody.insertRow();

在使用前请参考tBody (myTbody)。请注意,您不需要传递表格中的最后一个位置;省略参数时,它会自动定位在末尾。

A live demo is at jsFiddle.

【讨论】:

    【解决方案5】:

    我认为这个脚本正是你需要的

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

    【讨论】:

    • 当然你需要修改你的新行,但我只是在答案中提供了这个概念,剩下的留给你:)
    【解决方案6】:

    添加行:

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

    添加列、添加行、删除列、删除行。 最简单的方法

        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 id="tblSample" contenteditable><tr><td></td></tr></table>
        </form>
    
        </body>
        </html>

    【讨论】:

      【解决方案8】:

      let myTable = document.getElementById('myTable').getElementsByTagName('tbody')[0];
      
      let row = myTable.insertRow();
      let cell1 = row.insertCell(0);
      let cell2 = row.insertCell(1);
      let cell3 = row.insertCell(2);
      
      cell1.innerHTML = 1;
      cell2.innerHTML = 'JAHID';
      cell3.innerHTML = 23;
      
      row = myTable.insertRow();
      cell1 = row.insertCell(0);
      cell2 = row.insertCell(1);
      cell3 = row.insertCell(2);
      
      cell1.innerHTML = 2;
      cell2.innerHTML = 'HOSSAIIN';
      cell3.innerHTML = 50;
      table {
        border-collapse: collapse;
      }
      
      td, th {
        border: 1px solid #000;
        padding: 10px;
      }
      <table id="myTable">
          <thead>
              <tr>
                  <th>ID</th>
                  <th>NAME</th>
                  <th>AGE</th>
              </tr>    
           </thead>
          <tbody></tbody>
      </table>

      【讨论】:

        【解决方案9】:

        我已经尝试过了,这对我有用:

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

        【讨论】:

        • 如果页脚有 2 行呢?
        • 好吧,简单的让它成为 var row=table.insertRow(0);它将在顶部添加行
        • @JVerstry tbody:这正是mozilla
        【解决方案10】:

        您也可以使用querySelector 选择tbody,然后在其末尾插入新行。

        使用append 将 Node 或 DOMString 对象插入到新单元格中,然后将插入到新行中。

        var myTbody = document.querySelector("#myTable>tbody");
        var newRow = myTbody.insertRow();
        newRow.insertCell().append("New data");
        <table id="myTable">
          <thead>
            <tr>
              <th>My Header</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Data</td>
            </tr>
          </tbody>
          <tfoot>
            <tr>
              <td>My footer</td>
            </tr>
          </tfoot>
        </table>

        【讨论】:

          【解决方案11】:

          您可以使用以下示例:

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

          【讨论】:

            【解决方案12】:
            <!DOCTYPE html>
            <html lang="en">
              <head>
                <meta charset="utf-8" />
                <link rel="stylesheet" type="text/css" href="css/style.css" />
                <title>Expense Tracker</title>
              </head>
              <body>
                <h1>Expense Tracker</h1>
            
                <div id="myDiv">
                  <label for="name">Name:</label>
                  <input
                    type="text"
                    name="myInput"
                    id="myInput"
                    placeholder="Name of expense"
                    size="50"
                  /><br /><br />
                  <label for="date">Date:</label>
                  <input type="date" id="myDate" name="myDate" />
                  <label for="amount">Amount:</label>
                  <input
                    type="text"
                    name="myAmount"
                    id="myAmount"
                    placeholder="Dollar amount ($)"
                  /><br /><br />
                  <span onclick="addRow()" class="addBtn">Add Expense</span>
                </div>
                <br />
                <input type="button" value="Add Rows" onclick="addRows()" />
                <!-- Optional position -->
                <table id="myTable">
                  <tr>
                    <th>Name</th>
                    <th>Date</th>
                    <th>Amount</th>
                    <th>Delete</th>
                  </tr>
                  <tr>
                    <td>McDonald's</td>
                    <td>6/22/2017</td>
                    <td>$12.00</td>
                    <td>
                      <input type="button" value="Delete" onclick="deleteRow(this)" />
                    </td>
                  </tr>
                </table>
            
                <script>
                  function deleteRow(r) {
                    var i = r.parentNode.parentNode.rowIndex;
                    document.getElementById("myTable").deleteRow(i);
                  }
                  function addRows() {
                    console.log("add rows");
                    document.getElementById("myTable").innerHTML += `<tr>
                    <td>McDonald's</td>
                    <td>6/22/2017</td>
                    <td>$12.00</td>
                    <td>
                      <input type="button" value="Delete" onclick="deleteRow(this)" />
                    </td>
                  </tr>`;
                  }
                </script>
              </body>
            </html>
            

            【讨论】:

              猜你喜欢
              • 2018-10-14
              • 1970-01-01
              • 2017-06-16
              • 1970-01-01
              • 2013-04-22
              • 2019-10-16
              • 2011-11-21
              • 1970-01-01
              相关资源
              最近更新 更多