2013-01-11 28 views
0

我理解錯了嗎?或者它應該是這樣的?d3js selection.enter()取決於添加的新數據的順序?

上點擊按鈕a原圈

d3.select("svg").selectAll('circle') 
.data([{'name':'john', 'age': '50'}]).enter().append('circle') 
.attr("cx", function(d){return d.age;}).attr("cy", '200').attr("r", '10').attr("fill", 'red'); 

以下稱爲功能

function prependValue(){ 
    d3.select("svg").selectAll('circle') 
    .data([{'name':'peter', 'age': '100'}, {'name':'john', 'age': '50'} ]) 
    .enter().append('circle').attr("cx", function(d){return d.age;}).attr("cy", '200').attr("r", '10').attr("fill", 'green'); 
} 

我假定它應該在CX添加一個綠色圓圈彼得= 100,但是,它改變顏色約翰到綠色的圈子。

,如果我做

.data([{'name':'john', 'age': '50'}, {'name':'peter', 'age': '100'} ]) 

一切正常。

+0

我很高興你得到了一個回答你的問題,但你需要投入一點更多的努力以使您的問題更understandabl e,而不依賴於其他人爲你編輯它們。特別是,您的幾個問題顯示了代碼格式問題。在Markdown編輯器上面有幫助可以解釋如何正確格式化代碼;在問你的下一個問題之前,你應該先熟悉這個過程。 –

回答

0

如果您未指定用於匹配數據元素的函數(.data()的可選參數),那麼D3會按索引匹配元素。也就是說,它的確假設你將以相同的順序傳遞元素。

爲了防止發生這種情況,請傳入一個函數,告訴它如何匹配元素(例如按名稱)。有關更多信息,請參閱the documentation

+0

嗨拉爾斯,非常感謝你的回答。真的很感激。 – snailclimbingtree

相關問題