如何在纯JavaScript中动态地将<tr>标签添加到<table>标签?

ken*_*nji 0 javascript

html文件中的代码如下:

<html>
    <script type="text/javascript">
       var records=[{"name":"Fred","id":"123"},{"name":"Jim","id":"456"}];
    </script>
    <table id="tb1">
        <tr id="row1">
            <td style="background-color:gray" id="name">name</td><td style="background-color:gray" id="id">id</td>
        </tr>
        <tr id="row2"><td>shouldn't be added here</td><td>neither here</td></tr>
    </table>
</html>
Run Code Online (Sandbox Code Playgroud)

我想在纯javascript中添加row1和row2之间的记录内容.(没有任何第三方javascript框架)我该怎么办?

T.J*_*der 5

您不添加"标签",而是添加到元素中.

在一般情况下,您可以通过document.createElement(或通过将包含HTML的字符串分配给现有元素的innerHTML属性)来创建元素.

使用appendChild或添加元素作为其他元素的子元素insertBefore.

因此,举例来说,这里是你如何可以添加含有两个表格单元格的行之前id="row2"在表:

var newRow = document.createElement('tr');
newRow.appendChild(document.createElement('td')); // The first cell
newRow.appendChild(document.createElement('td')); // The second cell
var row2 = document.getElementById("row2");
row2.parentNode.insertBefore(newRow, row2);       // Insert it
Run Code Online (Sandbox Code Playgroud)

但是,正如Heitor所指出的那样,对于表,可以使用特定的方法,而不是冗长的:

以下是上面的代码insertCell:

var newRow = document.createElement('tr');
newRow.insertCell(-1);                            // The first cell
newRow.insertCell(-1);                            // The second cell
var row2 = document.getElementById("row2");
row2.parentNode.insertBefore(newRow, row2);       // Insert it
Run Code Online (Sandbox Code Playgroud)

我们可以同时使用insertRow:

var row2 = document.getElementById("row2");            // Get existing row
var newRow = row2.parentNode.insertRow(row2.rowIndex); // Create and insert new row
newRow.insertCell();                                   // The first cell
newRow.insertCell();                                   // The second cell
Run Code Online (Sandbox Code Playgroud)

...但是我们将重复更改显示的DOM(添加一个空白行,然后添加一个单元格,然后添加另一个单元格),如果可能,最好避免.在前两个示例中,我们创建了行并在将整个结构添加到DOM之前添加了其单元格,执行了一个实时DOM操作.


DOM API可能是冗长的,有点笨拙,它的实现可能会有点浏览器到浏览器(尽管以上所有都是可靠的).你显然可以直接使用它,但你也可以使用几个好的JavaScript DOM操作库中的任何一个来为你整理一些浏览器兼容性东西,并获得许多有用的实用程序功能.