有人可以解釋像我5這是如何這種D3語法實際工作?想在D3 - 選擇vs追加
var link = svg.selectAll('.link')
.data(links)
.enter().append('line')
.attr('class', 'link');
它似乎只是追加鏈接到樹。
但我如何閱讀是「選擇所有的類鏈接,並追加屬性類=鏈接」。在它們存在之前如何選擇令人費解。
爲什麼在項目實際存在之前有一個「選擇」? 選擇真的意味着「插入」?
有人可以解釋像我5這是如何這種D3語法實際工作?想在D3 - 選擇vs追加
var link = svg.selectAll('.link')
.data(links)
.enter().append('line')
.attr('class', 'link');
它似乎只是追加鏈接到樹。
但我如何閱讀是「選擇所有的類鏈接,並追加屬性類=鏈接」。在它們存在之前如何選擇令人費解。
爲什麼在項目實際存在之前有一個「選擇」? 選擇真的意味着「插入」?
逐行分析將低於想:
選擇具有link
類中的所有的DOM。
var link = svg.selectAll('.link')
爲所有這些鏈接綁定數據。這裏的數據鏈接是一個數組。 links[0]
綁定到第一個DOM(如果存在)。 links[1]
綁定到第二個DOM(如果存在)。 ..所以上
.data(links)
.enter()
情況1: 如果數組鏈接有2個元件和選擇DOM元素具有0個元素。 然後2行DOM將被附加到svg DOM。
案例2: 如果數組鏈接有2個元素,並且選擇DOM元素有1個元素。 然後將1個新的線DOM附加到svg DOM。
案例3: 如果數組鏈接有2個元素,並且選擇DOM元素有2個或多個元素。 然後將0個新行DOM添加到svg DOM。
.append('line')
.attr('class', 'link');
這將是一個很好read
我同意,這完全是混淆必須做出選擇,即使它存在之前。但通過在選擇上調用data(someDataArray)
,此佔位符選擇現在綁定到您的數據。現在
,爲將enter
的data
在someDataArray
每一件事情,D3將append
相應的SVG line
(並附相關數據)。
如果someDataArray
發生變化,d3可以通過update
更改連接的SVG節點的外觀,甚至可以刪除不再與exit
關聯的數據的舊節點。
此鏈接有一步一步解釋 - https://www.dashingd3js.com/binding-data-to-dom-elements – Gilsha
謝謝。這確實解釋了它,並回答了一個顯而易見的問題,即API是違反直覺的,因爲它會問「但是等等,什麼?」幾次。尼安德特人。 – dcsan
你甚至不需要最後一行'.attr(「class」,「.link」)'這個工作。閱讀:http://stackoverflow.com/documentation/d3。js/2135/selections/16948 /這個角色的佔位符在輸入選擇#t = 201608310519416966291 –