D3.js 理解 Update、Enter、Exit

Update、Enter、Exit 是 D3 中三个很是重要的概念,它处理的是当选择集和数据的数量关系不肯定的状况。数组

73

 

 

 

1、什么是 Update、Enter、Exitapp

svg.selectAll("rect")   //选择svg内全部的矩形
    .data(dataset)      //绑定数组
    .enter()            //指定选择集的enter部分
    .append("rect")     //添加足够数量的矩形元素

  这段代码使用的状况是当如下状况出现的时候:有数据,而没有足够图形元素的时候,使用此方法能够添加足够的元素。svg

  假设,在 body 中有三个 p 元素,有一数组 [3, 6, 9],则能够将数组中的每一项分别与一个 p 元素绑定在一块儿。spa

  可是,有一个问题:当数组的长度与元素数量不一致(数组长度 > 元素数量 or 数组长度 < 元素数量)时呢?这时候就须要理解 Update、Enter、Exit 的概念。code

  若是数组为 [3, 6, 9, 12, 15],将此数组绑定到三个 p 元素的选择集上。能够想象,会有两个数据没有元素与之对应,这时候 D3 会创建两个空的元素与数据对应,这一部分就称为Enterblog

  而有元素与数据对应的部分称为 Updaterem

  若是数组为 [3],则会有两个元素没有数据绑定,那么没有数据绑定的部分被称为 Exit。示意图以下所示。it

  4-4-8

 

 

 

2、Update 和 Enter 的使用io

  当对应的元素不足时 ( 绑定数据数量 > 对应元素 ),须要添加元素(append)。function

  如今 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 部分被绑定的数据很清晰地表示了出来。

  71 

  请你们记住:

    • update 部分的处理办法通常是:更新属性值
    • enter 部分的处理办法通常是:添加元素后,赋予属性值

 

 

3、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();

  结果以下,请你们区分好 update 部分和 exit 部分。这里为了代表哪一部分是 exit,并无删除掉多余的元素,但实际上 exit 部分的绝大部分操做是删除。

  72

  请你们记住:

    • exit 部分的处理办法通常是:删除元素(remove)
相关文章
相关标签/搜索