data() 函數有兩個參數,第一個是被綁定數據,第二個參數用于指定綁定的順序。在數據需要更新的時候常常會用到。
默認的情況下,data()函數是按照索引號依次綁定數組各項的。第0個元素綁定數組的第0項,第1個元素綁定數組的第1項,依此類推。也可以不按照此順序進行綁定,這就要用到data()的第二個參數。這個參數是一個函數,稱為鍵函數(key function)。
要注意,只有在選擇集原來已經綁定有數據的情況下,才能使用鍵函數指定綁定的順序。請看以下代碼:
~~~
<body>
<!-- 三個空的p元素 -->
<p></p>
<p></p>
<p></p>
<script>
//數據
var persons = [ { id: 3 , name:"張三" },
{ id: 6 , name:"李四" },
{ id: 9 , name:"王五" }];
//選擇body中的所有的p元素
var p = d3.select("body").selectAll("p");
//綁定數據,并修改p元素的內容
p.data(persons)
.text(function(d){
return d.id + " : " + d.name;
});
</script>
</body>
~~~
這段代碼對p元素的內容進行了修改,修改之后的p元素為:
~~~
<p>3 : 張三</p>
<p>6 : 李四</p>
<p>9 : 王五</p>
~~~
下面將persons里的數據更新,再綁定一次數據。本次綁定添加鍵函數:
~~~
//更新persons里的數據
persons = [ { id: 6 , name:"張三" },
{ id: 9 , name:"李四" },
{ id: 3 , name:"王五" }];
//根據鍵函數的規則綁定數據,并修改內容
p.data(persons, function(d){ return d.id; })
.text(function(d){
return d.id + " : " + d.name;
});
~~~
鍵函數里只有一個語句return?d.id。表示使用數組項的id屬性作為**鍵**。使用本次綁定的數據修改p元素的內容后,結果如下:
~~~
<p>3 : 王五</p>
<p>6 : 張三</p>
<p>9 : 李四</p>
~~~
可以看到,結果并沒有按照新persons數組的次序(6:張三、9:李四、3:王五)排列。綁定過程如圖1所示,綁定的順序不按照索引號綁定,而是使**鍵**值依次對應。
[](http://www.ourd3js.com/wordpress/wp-content/uploads/2015/01/4-4-121.png)
圖1
謝謝閱讀。
### 文檔信息
- 版權聲明:署名(BY)-非商業性(NC)-禁止演繹(ND)
- 發表日期:2015 年 1 月 17 日
- 更多內容:[OUR D3.JS - 數據可視化專題站](http://www.ourd3js.com/) 和 [CSDN個人博客](http://blog.csdn.net/lzhlzz)
- 備注:本文發表于 [OUR D3.JS](http://www.ourd3js.com/) ,轉載請注明出處,謝謝