d3js如何选择我目前正在处理的元素

时间:2015-08-11 11:27:14

标签: javascript d3.js svg

我使用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元素。

1 个答案:

答案 0 :(得分:1)

我相信你所追求的是:

d3.select(this);

通常,如果您有某个事件或某个项目正在运行的功能,this将成为您正在操作的HTML元素。然后执行d3.select(this)会将其转换为D3选择。因此,如果您想枚举texts,例如,您可以使用:

d3.selectAll("文本&#34)   .each(function(d){      d3.select(本); //这是一个文本项目   });