使用 DOM 动态创建表
有人能告诉我这段代码有什么问题吗?我想创建一个 2 列 3 行的表格,并且在单元格中我希望每一行都有 Text1 和 Text2。此代码创建一个 2 列 3 行的表格,但第三行的单元格中只有文本(其他为空)。
var tablearea = document.getElementById('tablearea');
var table = document.createElement('table');
var tr = [];
var td1 = document.createElement('td');
var td2 = document.createElement('td');
var text1 = document.createTextNode('Text1');
var text2 = document.createTextNode('Text2');
for (var i = 1; i < 4; i++){
tr[i] = document.createElement('tr');
for (var j = 1; j < 4; j++){
td1.appendChild(text1);
td2.appendChild(text2);
tr[i].appendChild(td1);
tr[i].appendChild(td2);
}
table.appendChild(tr[i]);
}
tablearea.appendChild(table);
Can someone tell me what's wrong with this code? I want to create a table with 2 columns and 3 rows, and in the cells I want Text1 and Text2 on every row. This code creates a table with 2 columns and 3 rows, but it's only text in the cells in the third row (the others are empty).
var tablearea = document.getElementById('tablearea');
var table = document.createElement('table');
var tr = [];
var td1 = document.createElement('td');
var td2 = document.createElement('td');
var text1 = document.createTextNode('Text1');
var text2 = document.createTextNode('Text2');
for (var i = 1; i < 4; i++){
tr[i] = document.createElement('tr');
for (var j = 1; j < 4; j++){
td1.appendChild(text1);
td2.appendChild(text2);
tr[i].appendChild(td1);
tr[i].appendChild(td2);
}
table.appendChild(tr[i]);
}
tablearea.appendChild(table);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
您必须在循环内创建 td 和文本节点。您的代码仅创建 2 个 td,因此只有 2 个可见。例子:
You must create td and text nodes within loop. Your code creates only 2 td, so only 2 are visible. Example:
这是因为您只创建了两个 td 元素和 2 个文本节点。
在循环中创建所有节点
重新创建循环中的节点:
在循环中创建然后克隆
预先创建它们,然后在循环中克隆它们:
表工厂文本字符串
创建一个表工厂:
并像这样使用它:
带有文本字符串或回调的表工厂
该工厂可以轻松修改为接受第四个参数的函数,以便以更动态的方式填充每个单元格的内容。
像这样使用:
It is because you're only creating two
td
elements and 2 text nodes.Creating all nodes in a loop
Recreate the nodes inside your loop:
Creating then cloning in a loop
Create them beforehand, and clone them inside the loop:
Table factory with text string
Make a table factory:
And use it like this:
Table factory with text string or callback
The factory could easily be modified to accept a function as well for the fourth argument in order to populate the content of each cell in a more dynamic manner.
Used like this:
您需要为每列创建新的 TextNode 和 td 节点,而不是像代码那样在所有列中重用它们。
编辑:
像这样修改你的代码:
You need to create new TextNodes as well as td nodes for each column, not reuse them among all of the columns as your code is doing.
Edit:
Revise your code like so:
您可以创建动态表行,如下所示:
You can create a dynamic table rows as below:
当您说“appendchild”时,您实际上将您的孩子从一个父母转移到另一个父母。
您必须为每个单元创建一个节点。
when you say 'appendchild' you actually move your child from one parent to another.
you have to create a node for each cell.
在我的示例中,序列号是根据使用 css 对每行执行的操作进行管理的。我在每一行中使用了一个表单,当创建新行时,表单将被重置。
希望这有帮助。
In my example, serial number is managed according to the actions taken on each row using css. I used a form inside each row, and when new row created then the form will get reset.
Hope this helps.
在我的示例中,从按钮单击事件调用添加函数,然后从表单控件获取值并调用函数generateTable。
在generateTable函数中首先检查表是否已生成。如果表未定义,则调用generateHeader函数和生成标题,然后调用addToRow函数在表中添加新行。
In My example call add function from button click event and then get value from form control's and call function generateTable.
In generateTable Function check first Table is Generaed or not. If table is undefined then call generateHeader Funtion and Generate Header and then call addToRow function for adding new row in table.
您可以使用 LemonadeJS 来做到这一点。
You can do that using LemonadeJS.