背景:我认为我最终得到的是一个动态创建的表,它与JSON数据中的条目数量相同。结果:循环仅创建一个表TR并将所有数据放在一行中。下面是循环和表创建的片段。var tbl = document.createElement("table");
var tblBody = document.createElement("tbody");
var row = document.createElement("tr");
var tdname = document.createElement('td');
var tddate = document.createElement('td');
var tdassigned = document.createElement('td');
for (var i in data) {
console.log("Hello world!" + i);
tdname.appendChild(document.createTextNode(data[i].name));
tddate.appendChild(document.createTextNode(data[i].date));
tdassigned.appendChild(document.createTextNode(data[i].assigned));
row.appendChild(tdname);
row.appendChild(tddate);
row.appendChild(tdassigned);
}
tblBody.appendChild(row);
tbl.appendChild(tblBody);
document.getElementById("tasklist").appendChild(tbl);问题:我是否需要为每个循环创建唯一的行变量?
3 回答
侃侃无极
TA贡献2051条经验 获得超10个赞
如果
data
是对象的数组,开始像一个阵列的方法.map()
或.forEach()
(演示使用.foreach()
,因为是不是真的需要一个新的阵列做一个表)。这将使用
.insertRow()
每个对象迭代数组。现在每个对象转换成元件的它的值与Object.values()
或Object.keys()
(演示使用Object.values()
这节省了步骤)。现在通过与值的阵列迭代
.forEach()
或.map()
和.insertCell()
然后.textContent
的值到细胞中。
let data = [{ name: 'John Doe', date: '1/1/19', assigned: 'A' }, { name: 'Jane Doe', date: '2/1/819', assigned: 'B' }, { name: 'Darth Vader', date: '3/11/19', assigned: 'C' }, { name: 'Obi Wan', date: '4/20/19', assigned: 'D' }];const frag = document.createDocumentFragment();const tbl = document.createElement("table");const tblB = document.createElement("tbody"); tbl.appendChild(tblB);frag.appendChild(tbl);data.forEach((obj, idx) => { let row = tblB.insertRow(); Object.values(obj).forEach(val => { let cell = row.insertCell(); cell.textContent = val; });});document.body.appendChild(frag);
Helenr
TA贡献1780条经验 获得超4个赞
我刚刚看到你的评论,你更喜欢vanilla js。如果感兴趣,这是jquery方式。
var data = [ { Column1: "col1row1", Column2: "col2row1" }, { Column1: "col1row2", Column2: "col2row2" }];$("#tasklist") .append($('<table>') .append($('<tbody>')));var tbody = $("#tasklist > table > tbody");$.each(data, function (idx, item) { $(tbody).append($('<tr>') .append($('<td>') .text(item.Column1) ) .append($('<td>') .text(item.Column2) ) );});
添加回答
举报
0/150
提交
取消