理解Update、Enter、Exit 与 添加、删除元素

在使用data()绑定数据时,例如:现在我们有一个数组[3,6,9,12,15],我们可以将数组每一项与一个<p>绑定,但是,现在就有一个问题——数据集个数和选择集个数不匹配怎么办?这样就需要理解Update、Enter、Exit
通过以下图可以理解 Update、Enter、Exit

  • 数组[3,6,9,12,15]绑定到三个<p>上。可以想象到,数组的最后两个元素没有可以绑定的元素,这时D3会建立两个空的元素与数组最后的两个数据相对于,那么这部分就称为Enter。而有元素与数据对应的部分就称为Update

  • 如果数组[3]绑定到三个<p>上,可以想象,最后两个<p>没有可绑定的数据,那么没有数据绑定的部分就称为Exit

Update与Enter的使用
<body>
<p>name1</p>
<p>name2</p>
<p>name3</p> <script>
var dataset = [3,6,9,12,15];
var p = d3.selectAll("p");
var update = p.data(dataset)//绑定数据,并得到update部分
var enter = update.enter();//得到enter部分
//下面检验是否真的得到
//对于update的处理
// 匿名函数第一个参数 d 为每个元素所绑定的对应数据 data
// 匿名函数第一个参数 i 为每个元素的索引,从 0 开始递增
update.text(function(d,i){
return "update: "+d+",index: "+i;
})
//对于enter的处理
//注意,这里需要先添加足够多的<p>,然后在添加文本
var pEnter = enter.append("p")//添加足够多的<p>
pEnter.text(function(d,i){
return "enter: "+d+",index: "+i;
}) /*
运行结果如下:
update: 3,index: 0
update: 6,index: 1
update: 9,index: 2
enter: 12,index: 3
enter: 15,index: 4
*/
</script>
</body>
Update与Exit的使用
<body>
<p>name1</p>
<p>name2</p>
<p>name3</p> <script> var dataset = [3,6];
var p = d3.select("body")
.selectAll("p");
var update = p.data(dataset)//绑定数据,并得到update部分
var exit = update.exit();//得到exit部分
//下面检验是否真的得到
//对于update的处理
update.text(function(d,i){
return "update: "+d+",index: "+i;
})
//对于exit的处理通常是删除 ,但在这里我并没有这么做
// 删除操作为 exit.remove()
exit.text(function(d,i){
return "exit";
})
/*
运行结果如下:
update: 3,index: 0
update: 6,index: 1
exit
*/
</script>
</body>
selection.join(enter[, update][, exit])

这是V5版本的新特性,这种方法很方便,可以代替selection.enter, selection.exit, selection.append, selection.remove, selection.order.

svg.selectAll("circle")
.data(data)
.join("circle")
.attr("fill", "none")
.attr("stroke", "black");

简写相当于:

svg.selectAll("circle")
.data(data)
.join(
enter => enter.append("circle"),
update => update,
exit => exit.remove()
)
.attr("fill", "none")
.attr("stroke", "black");

通过在进入、更新和退出上传递单独的函数,您可以更好地控制发生的事情。通过指定选择的关键函数、数据,您可以尽量减少对DOM的更改以优化性能。例如,为输入和更新设置不同的填充颜色:

svg.selectAll("circle")
.data(data)
.join(
enter => enter.append("circle").attr("fill", "green"),
update => update.attr("fill", "blue")
)
.attr("stroke", "black");

4. 理解Update、Enter、Exit 与 添加、删除元素的更多相关文章

  1. 【 D3.js 入门系列 --- 7 】 理解 update, enter, exit 的使用

    在前面几节中反复出现了如下代码: svg.selectAll("rect") .data(dataset) .enter() .append("rect") 当 ...

  2. jQuery添加删除元素

    $(document).ready(function () { $('#radioExtranet').on('click', function () { showProjectInformation ...

  3. 分别使用原生js和jQuery添加/删除元素的class属性

    一.原生js添加/删除元素的class属性: <!-- span元素原有class = "test" --> <span class="test&quo ...

  4. Java ArrayList正确循环添加删除元素方法及分析

    在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 一.foreach循环 foreach循环(Foreach loop)是计算机编程 ...

  5. 集合遍历过程iterator, 添加删除元素报异常

    list  set  遍历过程中添加或者删除元素,报异常. 使用iterator 也会报异常 ConcurrentModificationException remove只能用迭代器的remove,而 ...

  6. JS中的数组,添加删除元素,判断是否存在一个值的方法总结

    一.添加元素: 1:在最后添加,返回数组长度:arr.push(...); 2:在最前面添加,返回数组长度:arr.unshift(...); 3:在指定位置添加,没有返回值:arr[i] = xxx ...

  7. js添加删除元素内容

    <body> <div id="div" style="background: yellow;width:200px;height:200px;&quo ...

  8. JavaScript HTML DOM---遗漏知识再整理(向html添加/删除元素,改变内容和css)

    1.  HTML DOM 改变 HTML 内容:(HTML DOM 允许 JavaScript 改变 HTML 元素的内容.) (1)改变 HTML 输出流 在 JavaScript 中,docume ...

  9. js添加删除元素

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  10. vue 样式渲染,添加删除元素

    <template> <div> <ul> <li v-for="(item,index) in cartoon" :key=" ...

随机推荐

  1. Java安全之 ClassLoader类加载器

    Java安全之 ClassLoader类加载器 0x00 前言 前面这里抛出一个问题,Java到底是什么类型的编程语言?是编译型?还是解释型?在这个问题是其实一直都都有疑惑,如果说是解释型语言的话,那 ...

  2. 我在学习Blazor当中踩的巨坑!Blazor WebAssembly调试

    最近嘛,看看Blazor已经蛮成熟的.顺便想在自家的框架里使用这个东西,毕竟我还是很念旧的,而且Blazor的技术栈也不麻烦.然后呢,在调试这一关我可是踩了大坑. 我的VS是2019,很早以前装的.然 ...

  3. P3335-[ZJOI2013]蚂蚁寻路【dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P3335 题目大意 给出\(n\times m\)的网格,每个格子有权值.一个回路在格子的边上,要求有\(2\tim ...

  4. 深入浅出WPF-06.Binding(绑定)01

    Binding(绑定) 先上图,再解释 针对这个图,我们先来说说什么是Binding. Binding就是一个桥梁,建立在数据和UI之间的桥梁.既然是数据驱动,那么我们就把数据称之为"源&q ...

  5. 解决springboot 配置文件未映射静态资源文件 导致shiro拦截静态资源的问题

    ---------------------------------------------------------------------------------------------------- ...

  6. 国庆总结:echarts自定义颜色主题,保证你看的明明白白

    为什么需要使用颜色主题 随着用户审美越来越高,不再是过去那样只注重功能. 所以对界面的颜色样式都具有一定的审美要求 此时颜色是否好看就非常重要了 因为人都是视觉动物 对界面的第一印象肯定都是颜色. 如 ...

  7. 常见的==和equals比较

    在笔试上碰到很多这样类似的题,全部整理到这里 String a = "Hello"; String b = "Hello"; String c = new St ...

  8. css 弹性盒子--“垂直居中”--兼容写法

    使用弹性盒子兼容低端适配有时需要: display:flex 和 display:-webkit-box   display: -webkit-box; -webkit-box-align: cent ...

  9. 屏幕截图小工具的制作过程问题记录 python PIL pynput pyautogui pyscreeze

    最近想做一个脚本小工具,方便写一些操作说明文档,它的功能很简单,就是把脚本打开之后,鼠标进行操作点击时,会在点击后进行截图,并在图上标记出点击的位置,有点类似于录屏软件的图片版,这样的话,如果要想用文 ...

  10. Go语言之结构体与方法

    一.结构体 结构体是一系列属性的集合(类似于 Python 中的类) 1.结构体的定义与使用 // 定义 type Person struct { Name string Age int Sex st ...