![](/img/trans.png)
[英]In D3, how can I create multiple elements for each data element based on value in data?
[英]How to create elements depending on data in D3?
看樣品:
d3.select("body").selectAll("div")
.data([4, 8, 15, 16, 23, 42])
.enter().append("div")
.text(function(d) { return d; });
忍不住想知道如何使 append 對提供的數據敏感 - 說do append and fill text
說if d == 8
否則不要 append?
最簡單的方法是在調用.data( ... )
之前過濾你的數組:
d3.select("body").selectAll("p")
.data([4, 8, 15, 16, 23, 42].filter(function(d){ return d < 10; }))
.enter().append("div")
.text(function(d) { return d; });
將只為4和8創建一個div。
或者,您可以在將數組綁定到頁面上的元素之后篩選您的選擇,以有條件地創建子元素:
d3.select("body").selectAll("div")
.data([4, 8, 15, 16, 23, 42])
.enter().append("div")
.text(function(d) { return d; })
.filter(function(d){ return d == 8; }).append("span")
.text("Equal to 8")
在您的示例中,您想根據條件添加一些內容或不添加任何其他內容。 然而,如果你想添加一些東西但它取決於你的條件 append,那么你可以使用D3中的大多數值都可以通過常量和函數傳遞的事實。 這也適用於 function .append(... )
。
因此,如果你想要 append 一些東西,但你想要 append 的 DOM 節點類型取決於條件,你可以使用如下內容:
d3.select("body").selectAll("div")
.data([4, 8, 15, 16, 23, 42])
.enter().append((d) => document.createElementNS("http://www.w3.org/2000/svg",
d < 10 ? "rect" : "circle"))
.text(function(d) { return d; });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.