Javascript d3从svg元素中选择数据

Javascript d3从svg元素中选择数据,javascript,d3.js,svg,Javascript,D3.js,Svg,在我的d3代码中选择g元素时遇到问题,并且不知道如何做 代码 var vis = d3.select("#custom-view").append('svg:svg').attr('width', w).attr('height', h); d3.range(lengthJson).forEach(function (t) { vis.append("g") .attr('width', wBlob) .attr('height', hBl

在我的d3代码中选择g元素时遇到问题,并且不知道如何做

代码

var vis = d3.select("#custom-view").append('svg:svg').attr('width', w).attr('height', h);

d3.range(lengthJson).forEach(function (t) {
         vis.append("g")
         .attr('width', wBlob)
         .attr('height', hBlob);

          return t

});

var blobs = **tried numerous things here**.selectAll('g').data(graph.nodes)
        .enter()
        .append('rect')
        (....do a lot more code...)
问题

上面描述的代码根据JSON文件的长度将元素添加到元素中。然后我希望它将元素附加到其中的每个元素

我尝试过的事情

试图将其声明为变量

var gCode = vis.append("g")
如果在生成g元素时未将其包装在forEach函数中,则该选项有效

我试图在属性中分配一个类,并通过所有g元素以这种方式进行选择


还尝试给svg元素一个ID并以这种方式选择它,但运气不好

不要使用循环,如
forEach
,在D3代码中附加元素

当然,我们在D3代码中一直使用循环(
用于
循环,
用于
循环,
forEach
循环等),因为D3是JavaScript。。。但是我们不使用循环来附加元素,这不是惯用的方式。最终,我们使用循环来附加元素,但在非常特殊和罕见的情况下

使用循环在D3代码中附加元素不仅很尴尬,有时还会使您陷入没有(简单)解决方案的境地。像这个

本例中惯用的方法是嵌套输入选择

因此,根据数据集的长度,使用enter选择来追加组,然后使用内部enter选择来追加矩形或任何需要的元素

下面是一个非常基本的示例,使用
s和
s:

var数据=[“foo”、“bar”、“baz”];
变量主体=d3。选择(“主体”);
var colors=d3.scaleOrdinal(d3.schemeCategory 10)
var divs=body.selectAll(空)
.数据(d3.范围(数据.长度))
.输入()
.附加(“div”)
.样式(“背景色”,功能(d){
返回颜色(d)
});
变量文本=divs.selectAll(空)
.数据(数据)
.输入()
.附加(“tspan”)
.文本(功能(d){
返回d+“”
})

不要使用循环(如
forEach
)在D3代码中附加元素

当然,我们在D3代码中一直使用循环(
用于
循环,
用于
循环,
forEach
循环等),因为D3是JavaScript。。。但是我们不使用循环来附加元素,这不是惯用的方式。最终,我们使用循环来附加元素,但在非常特殊和罕见的情况下

使用循环在D3代码中附加元素不仅很尴尬,有时还会使您陷入没有(简单)解决方案的境地。像这个

本例中惯用的方法是嵌套输入选择

因此,根据数据集的长度,使用enter选择来追加组,然后使用内部enter选择来追加矩形或任何需要的元素

下面是一个非常基本的示例,使用
s和
s:

var数据=[“foo”、“bar”、“baz”];
变量主体=d3。选择(“主体”);
var colors=d3.scaleOrdinal(d3.schemeCategory 10)
var divs=body.selectAll(空)
.数据(d3.范围(数据.长度))
.输入()
.附加(“div”)
.样式(“背景色”,功能(d){
返回颜色(d)
});
变量文本=divs.selectAll(空)
.数据(数据)
.输入()
.附加(“tspan”)
.文本(功能(d){
返回d+“”
})