javascript - 带有关联数组数据集的 D3.js 表

标签 javascript dom embed d3.js

我正在尝试生成一个嵌入到 SVG 中的表格,其结构如下:

<table>
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
  </tr>
</table>

像这样的数据集:

var a = ["a", 1, "b", 2, "c", 3]

因此标签的计数是动态的,具体取决于键值对的数量,因此在本例中为 2。其中将是两个 td 的静态数量,每个 td 分别具有键和值。

到目前为止,我已经尝试过这样的事情:

var tr = ele.append("svg:foreignObject")
                    .attr("x", 5)
                    .attr("y", 30)
                    .attr("width", 60)
                    .attr("height", 120)
                    .append("xhtml:body")
                    .attr("xmlns", "http://www.w3.org/1999/xhtml")
                    .selectAll("tr")
                      .data(d3.keys(a))
                    .enter().append("tr");
tr.selectAll("td").data(a).enter()
 .append("td")
   .text(function (d) { return d; } );

结果是这样的:

<tr>
  <td></td>
  <td></td>
  <td></td>
</tr>  
<tr>
  <td></td>
  <td></td>
  <td></td>
</tr>
<tr>
  <td></td>
  <td></td>
  <td></td>
</tr>

因此,行数正确,但 tds 数不正确。

编辑: 执行一个

tr.append("td").text("test");
tr.append("td").text("test2");

产生了正确的结构,尽管当我尝试使用带有两个单独附加项的 .data() 函数遍历数据集时,它当然会添加两个重复的 tds。

编辑 2: 我最终通过为 d3.js 链之外的表生成 HTML 并将其附加为 .html() 来解决我的问题。有没有更简洁的方法?

最佳答案

您可以像这样构建数据:[["a",1],["b",2],["c",3]]

然后你可以这样做:

var tr = table.selectAll("tr").data(data);
tr.enter().append("tr");
tr.each(function(d) {
   var td = d3.select(this).selectAll("td").data(d);
   td.enter().append("td");
})

类似的东西。

还没有编译,但它应该给你一个想法。

关于javascript - 带有关联数组数据集的 D3.js 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12260298/

相关文章:

javascript - 查看容器破坏了我的代码

javascript - 在正文中使用 javascript 将样式表添加到 Head

javascript - 使用媒体查询来操纵 jquery Accordion

ruby - cucumber 嵌入屏幕截图未链接到屏幕截图

javascript - 如何使用 enzyme 在 PhantomJS 中获取第二个元素?

javascript - 为什么在删除之前使用点符号检查属性比直接删除属性更快?

javascript - 如何在 jquery 中创建玩家回合?

java - 获取属性的节点父节点

flash - 有哪些替代方法可以将WAV循环编译为SWF?

ruby-on-rails - 仅允许视频嵌入代码 (Rails)