将基于 g 的 id 的文本附加到 gs 的选择中:无法读取未定义的 属性 'attr'
Append text based on g's id to a selection of gs: Cannot read property 'attr' of undefined
我的页面上有几个 g,每个都有不同的 id。
我想在每个 g 中附加一个显示此 id 的文本。
这是我的代码:
d3.selectAll("g")
.append('text')
.attr('x', 60)
.attr('y', 90)
.text(function(d) {return d.attr("id")})
.attr("font-family", "sans-serif")
.attr("font-size", "20px")
.attr("fill", "blue");
它returns一个错误:
Uncaught TypeError: Cannot read property 'attr' of undefined
at SVGTextElement.<anonymous>
在 D3 中,著名的第一个参数指的是绑定到元素的 datum(因此,相应的参数通常命名为 d
)。
您不需要数据。您想要获取作为文本父级的 <g>
元素。因此,使用:
.text(function() {
return d3.select(this.parentNode).attr("id")
});
这是一个演示:
d3.selectAll("g")
.append('text')
.attr('x', 60)
.attr('y', (_, i) => 20 + i * 20)
.text(function() {
return d3.select(this.parentNode).attr("id")
});
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg>
<g id="foo"></g>
<g id="bar"></g>
<g id="baz"></g>
</svg>
我的页面上有几个 g,每个都有不同的 id。 我想在每个 g 中附加一个显示此 id 的文本。
这是我的代码:
d3.selectAll("g")
.append('text')
.attr('x', 60)
.attr('y', 90)
.text(function(d) {return d.attr("id")})
.attr("font-family", "sans-serif")
.attr("font-size", "20px")
.attr("fill", "blue");
它returns一个错误:
Uncaught TypeError: Cannot read property 'attr' of undefined
at SVGTextElement.<anonymous>
在 D3 中,著名的第一个参数指的是绑定到元素的 datum(因此,相应的参数通常命名为 d
)。
您不需要数据。您想要获取作为文本父级的 <g>
元素。因此,使用:
.text(function() {
return d3.select(this.parentNode).attr("id")
});
这是一个演示:
d3.selectAll("g")
.append('text')
.attr('x', 60)
.attr('y', (_, i) => 20 + i * 20)
.text(function() {
return d3.select(this.parentNode).attr("id")
});
<script src="https://d3js.org/d3.v4.min.js"></script>
<svg>
<g id="foo"></g>
<g id="bar"></g>
<g id="baz"></g>
</svg>