2013-03-06 128 views
4

我一直玩弄"Using D3.js to present XML as HTML Table"的例子,試圖學習D3.js API。我想我已經掌握了它,但我無法真正理解.selectAll()的作用,而the documentation對此不是很有幫助。.selectAll()究竟做了什麼?

如果你看看例子,第17行:var td = tr.selectAll("td")。我也可以將其寫爲tr.selectAll("tr"),它將返回完全相同的表格/頁面。事實上,我可以寫tr.selectAll("SomethingCompletelyRandom"),它仍然可以工作,但我無法刪除.selectAll()

這是怎麼回事? .selectAll()是做什麼的?它如何取決於選擇器?

+1

D3 「選擇」 參考:(1)http://bost.ocks.org/mike/nest/,(2)HTTP:// WWW。 jeromecukier.net/blog/2013/03/05/d3-tutorial-at-strata-redux/,(3)http://www.dashingd3js.com/binding-data-to-dom-elements,(4)http ://bost.ocks.org/mike/join/。 – mg1075 2013-03-08 01:47:10

回答

3

您指向API鏈接是使用全選在以前的選擇(這是一個子選擇),所以它可能是沒有意義的,你看(可能會令人困惑。)文件的相關部分看看將是here,更一般地說,介紹那個選擇文件頁面,here

同時使用tdtr將在這裏工作是最初選擇在這兩種情況下,沒有返回值(因爲你是從,tr選擇的地方,有沒有什麼附加到它。)的原因,它是標準的做法選擇您將要創建的內容,因爲將其擴展爲動畫並更新時,它變得非常重要。

我會建議看Three Little CirclesThinking with Joins教程

3

它選擇所有<td>節點,它們是父節點<tr>的子節點。 D3將其作爲數組對象返回,即selectAll()將返回一個包含<td>節點數組作爲對象的數組,您可以在每個對象上調用其他d3函數。另外,瞭解幕後情況的一個好方法是使用Chrome開發人員工具並在控制檯中執行一些代碼。

例如,假設你有這樣的表:

<table> 
    <tr> 
     <td></td> 
     <td></td> 
     <td></td> 
    </tr> 
</table> 

如果您在控制檯中運行d3.selectAll("td"),你得到的結果將是:

[Array[3]] // A two dimensional array that contains 3 of the "td" nodes, each of of which is an object. 
    >0: td  // A D3 selection object. 
    >1: td 
    >2: td 
    length: 3 
    parentNode: document 
    __proto__: Array[0]