具有关联数组数据集的D3.js表
D3.js table with an associative-array dataset
我正在尝试生成一个表,该表嵌入到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>
因此,行数正确,但td数不正确。
编辑:执行
tr.append("td").text("test");
tr.append("td").text("test2");
结果是一个正确的结构,尽管当我尝试使用.data()函数和两个单独的append迭代数据集时,它当然会添加两个重复的td。
编辑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");
})
类似的东西。
尚未编译,但它应该会给你一个想法。
相关文章:
- 如何在d3.js中返回路径的y坐标
- 有条件更新d3.js力图中节点的最佳方法
- 使用D3.js计算带有字母间距的文本长度
- D3.js模式不适用于弧形或圆环图
- d3.js Chord图的动态工具提示
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- HTML5FileReader输出到D3.js图表
- D3.js生成有效的SVG,但不显示任何内容
- d3.js:限制画笔的大小
- d3.js用按钮更新条形图工具提示
- 如何为d3.js图表输出组织/嵌套数据
- d3-js快速事件调用问题
- D3.JS向rect添加缩放和列表项
- d3.js圆的半径是否可以由样式属性指定
- 如何在d3.js中自定义事件侦听器
- 在新窗口上使用d3.js
- 如何用d3.js绘制折线图
- 使用dc.js、d3.js和crossfilter引用错误
- D3.js剪辑路径截断了我的图的边缘
- D3.js和坐标系