Update、Enter、Exit 是 D3 中三個很是重要的概念,它處理的是當選擇集和數據的數量關係不肯定的狀況。數組
若是數組爲 [3, 6, 9, 12, 15],將此數組綁定到三個 p 元素的選擇集上。能夠想象,會有兩個數據沒有元素與之對應,這時候 D3 會創建兩個空的元素與數據對應,這一部分就稱爲 Enter。而有元素與數據對應的部分稱爲 Update。若是數組爲 [3],則會有兩個元素沒有數據綁定,那麼沒有數據綁定的部分被稱爲 Exit。示意圖以下所示。app
而以下代碼的意思是:此時 SVG 裏沒有 rect 元素,即元素數量爲 0。有一數組 dataset,將數組與元素數量爲 0 的選擇集綁定後,選擇其 Enter 部分(請仔細看上圖),而後添加(append)元素,也就是添加足夠的元素,使得每個數據都有元素與之對應。svg
svg.selectAll("rect") //選擇svg內全部的矩形 .data(dataset) //綁定數組 .enter() //指定選擇集的enter部分 .append("rect") //添加足夠數量的矩形元素
1. Update和Enter的使用spa
當對應的元素不足時 ( 綁定數據數量 > 對應元素 ),須要添加元素(append)。code
如今 body 中有三個 p 元素,要綁定一個長度大於 3 的數組到 p 的選擇集上,而後分別處理 update 和 enter 兩部分。blog
var dataset = [ 3 , 6 , 9 , 12 , 15 ]; //選擇body中的p元素 var p = d3.select("body").selectAll("p"); //獲取update部分 var update = p.data(dataset); //獲取enter部分 var enter = update.enter(); //update部分的處理:更新屬性值 update.text(function(d){ return "update " + d; }); //enter部分的處理:添加元素後賦予屬性值 enter.append("p") .text(function(d){ return "enter " + d; });
頁面效果:rem
須要注意的是:it
2. Update和Exit的使用io
當對應的元素過多時 ( 綁定數據數量 < 對應元素 ),須要刪掉多餘的元素。function
如今 body 中有三個 p 元素,要綁定一個長度小於 3 的數組到 p 的選擇集上,而後分別處理 update 和 exit 兩部分。
var dataset = [ 3 ]; //選擇body中的p元素 var p = d3.select("body").selectAll("p"); //獲取update部分 var update = p.data(dataset); //獲取exit部分 var exit = update.exit(); //update部分的處理:更新屬性值 update.text(function(d){ return "update " + d; }); //exit部分的處理:修改p元素的屬性 exit.text(function(d){ return "exit"; }); //exit部分的處理一般是刪除元素 // exit.remove();
須要注意的是: