【发布时间】:2022-01-23 07:17:04
【问题描述】:
喂!我的代码通过单击 div 动态创建表,但它仅将行附加到第一个。所有表格都存储在div中,包含表格本身和带有添加行按钮的div,包含在主div中。
HTML
<div id="main-container">
<div id="container">
<table id="table" class="my-table">
<tr>
<th>X</th>
<th>Y</th>
</tr>
<tr>
<td class="xcell" contenteditable="true"></td>
<td class="ycell" contenteditable="true"></td>
</tr>
<tr>
<td class="xcell" contenteditable="true"></td>
<td class="ycell" contenteditable="true"></td>
</tr>
<tr>
<td class="xcell" contenteditable="true"></td>
<td class="ycell" contenteditable="true"></td>
</tr>
<tr>
<td class="xcell" contenteditable="true"></td>
<td class="ycell" contenteditable="true"></td>
</tr>
</table>
<div id="addRowChild" class="add"><b>+</b></div>
</div>
</div>
</div>
在我的 JS 代码中,我一直在尝试使用兄弟 () 方法从每个容器 div 中获取表,但它不起作用,我不知道为什么会这样。
JS
function createNewTable() {
let newTable = document.createElement("table")
let mainContainer = document.getElementById("main-container") //refers to the div, containing all tables
let containerDiv = document.createElement("div") //creates div, which contains table and row adding div
let addRowButton = document.createElement("div") //creates row adding button
mainContainer.append(containerDiv)
containerDiv.id = "container"
containerDiv.append(newTable)
newTable.className = "my-table"
newTable.id = "table"
$("#addRowChild").click(function() {
let table = $("#addRowChild").siblings(".my-table")
table.append(`<tr><td class = "xcell" contenteditable = "true"></td><td class = "ycell" contenteditable = "true"></td></tr>`);
});
【问题讨论】:
-
ID 应该是唯一的,您不能为每个容器重复使用
id="container",为每个表重复使用id="table"。 -
为什么每次创建新表时都要为
#addRowChild添加另一个点击处理程序? -
那么,我应该把它变成一个类吗?
-
我没有,这只是我对堆栈溢出的糟糕编辑
-
我注意到
createNewTable末尾缺少},我猜它应该在点击处理程序之前。
标签: javascript html jquery