如何在d3js中通过条件追加`text`元素

时间:2015-08-04 07:01:45

标签: d3.js svg

我想通过条件在我的图形上附加text节点。我正在尝试这个,但没有工作。

这样做的正确方法是什么?

that.texts = that.groupElement.selectAll(label+"text").data(that.data).enter();

这种方法不起作用:

this.texts.append(function(d, i) {
            if(i== 0 && that.elementId === "paymentGraph")  {
                return "text" //so only one let created!
            }})
            .attr({
                class : this.elementId + "title"
            })
            .text("Total Contract Amount")
            .style("text-anchor", "middle");

方法工作在这里:(但我有2个text节点,1个是空的)

this.texts.append("text") //adding 2 text element.
           .attr({
              class : this.elementId + "title"
          })
          .text(function(d,i) {
              if(i==0 && that.elementId === "paymentGraph") 
                 return "Total Contract Amount"; //only one required
          })
          .style("text-anchor", "middle");

任何人都帮我显示正确的方式来附加节点吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

append不是你想要成为条件的地方.... append采用节点类型,并且您的函数不会返回任何一半的时间。

您应该使用选择器过滤掉要追加的元素以及要追加的数量的数据。

我觉得你看起来像

that.texts = that.groupElement.select("#paymentGraph")
             .selectAll(label+"text").data([that.data[0]]).enter();
this.texts.append("text")
.attr({class : this.elementId + "title"})
.text("Total Contract Amount")
.style("text-anchor", "middle");

或可能

if(that.elementId === "paymentGraph") {    
    that.texts = that.groupElement.selectAll(label+"text").data([that.data[0]]).enter();
    this.texts.append("text")
    .attr({class : this.elementId + "title"})
    .text("Total Contract Amount")
    .style("text-anchor", "middle");
}