[英]Function generating HTML table does not create <td> elements the first time
我做了一个基于您单击的元素生成表的函数:
.on("click", function(d, i) {
table1title = "Sources for " + d.key + " in Warehouse " + d.values["0"].Warehouse + " :" ;
selecteddata = [];
columns = ["Country", "Amount(KG)", "Frequency", "Delivery by"];
for(i=0; i<d.values.length; i++){
selecteddata.push(
[
d.values[i].Country,
d.values[i]["Amount (kg)"],
d.values[i].Frequency,
d.values[i]["Delivered by"]
]
)
}
genTable1();
})
function genTable1(){
columnrow.selectAll("th")
.data(columns)
.enter()
.append("th")
.text(function (d){return d});
table1header.text(table1title);
var rowsTable1 =
bodyTable1.selectAll("tr").data(selecteddata);
rowsTable1.exit().remove();
rowsTable1.enter().append("tr");
var cellsTable1 = rowsTable1.selectAll("td")
.data(function(selecteddata){
console.log(selecteddata);
return d3.values(selecteddata)})
cellsTable1.enter().append("td").text(function(d){return d;})
cellsTable1.exit().remove();
}
因此,当我第一次单击这样的元素时,该表的生成没有问题。 会生成正确数量的<tr>
元素,但不会生成<td>
元素。 您会看到一个console.log
,我想在其中生成<td>
元素,这是我第一次单击某些内容时没有任何输出到控制台。
如何获得第一轮要生成的元素?
另外,另一个错误是第一行永远不会更新为新值,它停留在给定的第一个值上……
好吧,我自己弄清楚了(是的)。 我使用以下选择层次结构对其进行了修复:
var cellsTable1 = bodyTable1.selectAll("tr").selectAll("td")
.data(function(selecteddata){
console.log(selecteddata);
return d3.values(selecteddata)})
我一直以为,仅引用对象会继承先前声明的层次结构,但我想不会。
我也能够解决的另一个错误。 我在附加时执行了.text(),所以只有新添加的单元格才获取新文本。 这样解决了:
cellsTable1.enter().append("td")
bodyTable1.selectAll("tr").selectAll("td").text(function(d){return d;})
感觉有点像stackoverflow上的孤独互动,但至少我可以为自己感到骄傲哈哈
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.