D3 容許將數據與被選擇的元素綁定在一塊兒,爲根據數據來操做元素提供方便。數組
在 D3 中,用於選擇元素的函數有兩個:app
這兩個函數返回的結果稱爲選擇集,常見用法以下。svg
var body = d3.select("body"); //選擇文檔中的body元素 var p1 = body.select("p"); //選擇body中的第一個p元素 var p = body.selectAll("p"); //選擇body中的全部p元素 var svg = body.select("svg"); //選擇body中的svg元素 var rects = svg.selectAll("rect"); //選擇svg中全部的svg元素
選擇集和綁定數據一般是一塊兒使用的。函數
D3 有一個很獨特的功能:能將數據綁定到 DOM 上,也就是綁定到文檔上。這麼說可能很差理解,例如網頁中有段落元素 p 和一個整數 5,因而能夠將整數 5 與 p 綁定到一塊兒。綁定以後,當須要依靠這個數據才操做元素的時候,會很方便。索引
D3 中是經過如下兩個函數來綁定數據的:文檔
相對而言,data() 比較經常使用。字符串
假設如今有三個段落元素以下。io
<p>Apple</p> <p>Pear</p> <p>Banana</p>
接下來分別使用 datum() 和 data(),將數據綁定到上面三個段落元素上。function
假設有一字符串 China,要將此字符串分別與三個段落元素綁定,代碼以下:select
var str = "China"; var body = d3.select("body"); var p = body.selectAll("p"); p.datum(str); p.text(function(d, i){ return "第 "+ i + " 個元素綁定的數據是 " + d; });
綁定數據後,使用此數據來修改三個段落元素的內容,其結果以下:
第 0 個元素綁定的數據是 China
第 1 個元素綁定的數據是 China
第 2 個元素綁定的數據是 China
在上面的代碼中,用到了一個無名函數 function(d, i)。當選擇集須要使用被綁定的數據時,常須要這麼使用。其包含兩個參數,其中:
例如,上述例子中:第 0 個元素 apple 綁定的數據是 China。
有一個數組,接下來要分別將數組的各元素綁定到三個段落元素上。
var dataset = ["I like dogs","I like cats","I like snakes"];
綁定以後,其對應關係的要求爲:
調用 data() 綁定數據,並替換三個段落元素的字符串爲被綁定的字符串,代碼以下:
var body = d3.select("body"); var p = body.selectAll("p"); p.data(dataset) .text(function(d, i){ return d; });
這段代碼也用到了一個無名函數 function(d, i),其對應的狀況以下:
此時,三個段落元素與數組 dataset 的三個字符串是一一對應的,所以,在函數 function(d, i) 直接 return d 便可。
結果天然是三個段落的文字分別變成了數組的三個字符串。
I like dogs I like cats I like snakes