我使用d3.js绘制散点图。我想添加一些包含多行的文本。如何选择我目前正在处理的元素?
var text= this.topBarElements.selectAll("#text").data(this.projectMap.text);
text.enter()
.append("text")
.attr("id", "text")
.attr("x", (d:rest.resource) => {
return (this.xScale(d.date));
})
.attr("y", 40)
.append("tspan")
.text((d:rest.resource) => {
var texts = ((d3.selectAll(text)[0]));
if (d.title.length > 7) {
console.log(d3.selectAll(this.topBarElements.text));
texts.append("tspan").text(d.title.substring(0, 5)).attr("x", this.xScale(d.date)).attr("y", 34);
texts.append("tspan").text(d.title.substring(5)).attr("x", this.xScale(d.date)).attr("y", 46);
return "";
}
return d.title;
)
}
基本上,我向它添加数据,如果标题太长,我会添加两个标题一半的tspan元素。这是有效的,但是因为我已经选择了所有7个文本元素,所以这样做了7次。
我尝试使用它,但这只是解析我正在绘制的整个svg元素。
答案 0 :(得分:1)
我相信你所追求的是:
d3.select(this);
通常,如果您有某个事件或某个项目正在运行的功能,this
将成为您正在操作的HTML元素。然后执行d3.select(this)
会将其转换为D3选择。因此,如果您想枚举texts
,例如,您可以使用:
d3.selectAll("文本&#34) .each(function(d){ d3.select(本); //这是一个文本项目 });