繁体   English   中英

无法生成函数生成HTML表 <td> 元素第一次

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM