2013-07-03 31 views

回答

27

您提供的班級名稱需要修正,即不能有類似function(d) { return d; }的內容。如果您需要通過數據確定班級名稱,則需要使用.attr("class", ...)

如果您擔心覆蓋現有的類名,請注意,您可以按如下方式檢索並添加它們。

.attr("class", function(d) { return d3.select(this).attr("class") + " " + d; }) 
+0

這正是我目前做的,我故作類名這可以被製作成一個班輪與三元運算符。我只是想知道是否有任何直接的方式來做到這一點。感謝您的答覆。 –

+7

爲了記錄,這裏是一個相關的pull請求來實現這個使用分類,它被拒絕的原因 - https://github.com/mbostock/d3/pull/1072 – Sam

+0

如果你想要使用箭頭函數('class',(d,i,nodes)=> d3.select(nodes [i])。attr('class')將這個指針指向函數外部的任何東西, )+''+ this.someMethod(d))' – user568458

4

我遇到了,我想補充一個類,如果我的數據屬性是真實的一個類似的問題,不同的類,如果財產是假的:

selection.classed('class-one', function(d) { return d.property; }) 
    .classed('class-two', function(d) { return d.property; }); 

如果你有一個小要添加的類的數量可能是值得考慮的。

0

所建議的答案相似,但我發現

selection.each(function(d) { d3.select(this).classed(d.class, true) 

也適用。

1

Lars答案很棒,但如果你從屬性上沒有任何類開始,那麼它會將類'null'添加到元素,因爲null屬性被強制爲一個字符串。從他的自然的下一步:

.attr("class", function(d) { 
     var existing = d3.select(this).attr("class") 
     if (existing == null){ 
     return d.column.class 
     }else{ 
     return existing + " " + d.column.class 
     } 
}) 

如果你想讓它更簡潔

相關問題