D3.js:Update、Enter、Exit


  UpdateEnterExit 是 D3 中三個非常重要的概念,它處理的是當選擇集和數據的數量關系不確定的情況。

  如果數組為 [3, 6, 9, 12, 15],將此數組綁定到三個 p 元素的選擇集上。可以想象,會有兩個數據沒有元素與之對應,這時候 D3 會建立兩個空的元素與數據對應,這一部分就稱為 Enter。而有元素與數據對應的部分稱為 Update。如果數組為 [3],則會有兩個元素沒有數據綁定,那么沒有數據綁定的部分被稱為 Exit。示意圖如下所示。

  而如下代碼的意思是:此時 SVG 里沒有 rect 元素,即元素數量為 0。有一數組 dataset,將數組與元素數量為 0 的選擇集綁定后,選擇其 Enter 部分(請仔細看上圖),然后添加(append)元素,也就是添加足夠的元素,使得每一個數據都有元素與之對應。

svg.selectAll("rect")   //選擇svg內所有的矩形
    .data(dataset)      //綁定數組
    .enter()            //指定選擇集的enter部分
    .append("rect")     //添加足夠數量的矩形元素

1. Update和Enter的使用

  當對應的元素不足時 ( 綁定數據數量 > 對應元素 ),需要添加元素(append)。

  現在 body 中有三個 p 元素,要綁定一個長度大於 3 的數組到 p 的選擇集上,然后分別處理 update 和 enter 兩部分。

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;
    });

頁面效果:

需要注意的是:

  • update 部分的處理辦法一般是:更新屬性值
  • enter 部分的處理辦法一般是:添加元素后,賦予屬性值

2. Update和Exit的使用

  當對應的元素過多時 ( 綁定數據數量 < 對應元素 ),需要刪掉多余的元素。

  現在 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();

需要注意的是:

  • exit 部分的處理辦法一般是:刪除元素(remove)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM