我正在使用d3 classed selection和在第一個參數,而不是字符串我想使用一個函數,將返回類名稱。我如何使用d3分類選擇具有名稱作爲功能
selection.classed(name[, value])
我知道我能做到使用ATTR一樣提到here,但我希望能夠做同樣使用歸類。我怎樣才能做到這一點?
我正在使用d3 classed selection和在第一個參數,而不是字符串我想使用一個函數,將返回類名稱。我如何使用d3分類選擇具有名稱作爲功能
selection.classed(name[, value])
我知道我能做到使用ATTR一樣提到here,但我希望能夠做同樣使用歸類。我怎樣才能做到這一點?
您提供的班級名稱需要修正,即不能有類似function(d) { return d; }
的內容。如果您需要通過數據確定班級名稱,則需要使用.attr("class", ...)
。
如果您擔心覆蓋現有的類名,請注意,您可以按如下方式檢索並添加它們。
.attr("class", function(d) { return d3.select(this).attr("class") + " " + d; })
我遇到了,我想補充一個類,如果我的數據屬性是真實的一個類似的問題,不同的類,如果財產是假的:
selection.classed('class-one', function(d) { return d.property; })
.classed('class-two', function(d) { return d.property; });
如果你有一個小要添加的類的數量可能是值得考慮的。
所建議的答案相似,但我發現
selection.each(function(d) { d3.select(this).classed(d.class, true)
也適用。
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
}
})
如果你想讓它更簡潔
這正是我目前做的,我故作類名這可以被製作成一個班輪與三元運算符。我只是想知道是否有任何直接的方式來做到這一點。感謝您的答覆。 –
爲了記錄,這裏是一個相關的pull請求來實現這個使用分類,它被拒絕的原因 - https://github.com/mbostock/d3/pull/1072 – Sam
如果你想要使用箭頭函數('class',(d,i,nodes)=> d3.select(nodes [i])。attr('class')將這個指針指向函數外部的任何東西, )+''+ this.someMethod(d))' – user568458