通过 Javascript 向 table 单元格添加一些文本和输入框
Add some text and an input box to a table cell through Javascript
我正在尝试将包含两列的行添加到 HTML 中预先存在的 table。到目前为止,我已经成功地做到了这一点。但是,我想在每个单元格中同时包含文本和输入框。到目前为止,这是我最接近的时间:
newinputbox = document.createElement("input");
newinputbox.setAttribute("type", "text");
table = document.getElementById("input_table");
row = table.insertRow(3);
cell1 = row.insertCell(0);
cell2 = row.insertCell(1);
thetext = document.createTextNode("Text:");
cell1.appendChild(thetext, newinputbox);
不幸的是,这只是 returns 文本。如果我去掉了cell1.appendChild(thetext, newinputbox)
语句中的thetext
,那么它就只有returns这个输入框了。
有人可以帮我吗?
您似乎假设 appendChild()
可以接收不定数量的要追加的参数。它只需要一个;任何后续的都将被忽略。
更简单的解决方案:
cell1.appendChild(newinputbox);
cell1.innerHTML += 'Text:';
问题的根源是对 Node.appendChild()
工作原理的简单误解;它只接受一个参数并且在每次调用时只附加一个子元素。
因此,修复错误的最简单方法就是再次调用 Node.appendChild()
:
let newinputbox = document.createElement("input");
newinputbox.setAttribute("type", "text");
let table = document.getElementById("input_table"),
row = table.insertRow(0),
cell1 = row.insertCell(0),
cell2 = row.insertCell(1),
thetext = document.createTextNode("Text:");
// append the first of the new child elements:
cell1.appendChild(thetext);
// append the second of the new child elements:
cell1.appendChild(newinputbox);
<table id="input_table">
</table>
或者,您可以创建一个简单的辅助函数,它接受多个参数并附加每个节点:
// defining a simple named function that takes two arguments,
// parent: the node to which the child nodes are to be appended,
// and an indefinite number (zero or more) of other arguments
// which are the child nodes to be appended.
// This uses a spread operator to destructure the arguments
// following 'parent' to be an array-like iterable object:
function appendMultiple(parent, ...progeny) {
// here we use forEach to iterate over the contents of the
// progeny variable:
progeny.forEach(
// 'child' refers to the current 'child' node of the
// 'array' of child nodes:
(child) => parent.appendChild(child)
);
}
let newinputbox = document.createElement("input");
newinputbox.setAttribute("type", "text");
let table = document.getElementById("input_table"),
row = table.insertRow(0),
cell1 = row.insertCell(0),
cell2 = row.insertCell(1),
thetext = document.createTextNode("Text:");
appendMultiple(cell1, thetext, newinputbox);
<table id="input_table">
</table>
参考文献:
我正在尝试将包含两列的行添加到 HTML 中预先存在的 table。到目前为止,我已经成功地做到了这一点。但是,我想在每个单元格中同时包含文本和输入框。到目前为止,这是我最接近的时间:
newinputbox = document.createElement("input");
newinputbox.setAttribute("type", "text");
table = document.getElementById("input_table");
row = table.insertRow(3);
cell1 = row.insertCell(0);
cell2 = row.insertCell(1);
thetext = document.createTextNode("Text:");
cell1.appendChild(thetext, newinputbox);
不幸的是,这只是 returns 文本。如果我去掉了cell1.appendChild(thetext, newinputbox)
语句中的thetext
,那么它就只有returns这个输入框了。
有人可以帮我吗?
您似乎假设 appendChild()
可以接收不定数量的要追加的参数。它只需要一个;任何后续的都将被忽略。
更简单的解决方案:
cell1.appendChild(newinputbox);
cell1.innerHTML += 'Text:';
问题的根源是对 Node.appendChild()
工作原理的简单误解;它只接受一个参数并且在每次调用时只附加一个子元素。
因此,修复错误的最简单方法就是再次调用 Node.appendChild()
:
let newinputbox = document.createElement("input");
newinputbox.setAttribute("type", "text");
let table = document.getElementById("input_table"),
row = table.insertRow(0),
cell1 = row.insertCell(0),
cell2 = row.insertCell(1),
thetext = document.createTextNode("Text:");
// append the first of the new child elements:
cell1.appendChild(thetext);
// append the second of the new child elements:
cell1.appendChild(newinputbox);
<table id="input_table">
</table>
或者,您可以创建一个简单的辅助函数,它接受多个参数并附加每个节点:
// defining a simple named function that takes two arguments,
// parent: the node to which the child nodes are to be appended,
// and an indefinite number (zero or more) of other arguments
// which are the child nodes to be appended.
// This uses a spread operator to destructure the arguments
// following 'parent' to be an array-like iterable object:
function appendMultiple(parent, ...progeny) {
// here we use forEach to iterate over the contents of the
// progeny variable:
progeny.forEach(
// 'child' refers to the current 'child' node of the
// 'array' of child nodes:
(child) => parent.appendChild(child)
);
}
let newinputbox = document.createElement("input");
newinputbox.setAttribute("type", "text");
let table = document.getElementById("input_table"),
row = table.insertRow(0),
cell1 = row.insertCell(0),
cell2 = row.insertCell(1),
thetext = document.createTextNode("Text:");
appendMultiple(cell1, thetext, newinputbox);
<table id="input_table">
</table>
参考文献: