4. 理解Update、Enter、Exit 与 添加、删除元素
理解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 与 添加、删除元素的更多相关文章
- 【 D3.js 入门系列 --- 7 】 理解 update, enter, exit 的使用
在前面几节中反复出现了如下代码: svg.selectAll("rect") .data(dataset) .enter() .append("rect") 当 ...
- jQuery添加删除元素
$(document).ready(function () { $('#radioExtranet').on('click', function () { showProjectInformation ...
- 分别使用原生js和jQuery添加/删除元素的class属性
一.原生js添加/删除元素的class属性: <!-- span元素原有class = "test" --> <span class="test&quo ...
- Java ArrayList正确循环添加删除元素方法及分析
在阿里巴巴Java开发手册中,有这样一条规定: 但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考. 一.foreach循环 foreach循环(Foreach loop)是计算机编程 ...
- 集合遍历过程iterator, 添加删除元素报异常
list set 遍历过程中添加或者删除元素,报异常. 使用iterator 也会报异常 ConcurrentModificationException remove只能用迭代器的remove,而 ...
- JS中的数组,添加删除元素,判断是否存在一个值的方法总结
一.添加元素: 1:在最后添加,返回数组长度:arr.push(...); 2:在最前面添加,返回数组长度:arr.unshift(...); 3:在指定位置添加,没有返回值:arr[i] = xxx ...
- js添加删除元素内容
<body> <div id="div" style="background: yellow;width:200px;height:200px;&quo ...
- JavaScript HTML DOM---遗漏知识再整理(向html添加/删除元素,改变内容和css)
1. HTML DOM 改变 HTML 内容:(HTML DOM 允许 JavaScript 改变 HTML 元素的内容.) (1)改变 HTML 输出流 在 JavaScript 中,docume ...
- js添加删除元素
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- vue 样式渲染,添加删除元素
<template> <div> <ul> <li v-for="(item,index) in cartoon" :key=" ...
随机推荐
- Uncaught TypeError: upload is not a function at HTMLInputElement.onclick
js 中标签的id名称不能和方法名一样, <tr> <td><input type="button" id="login" val ...
- Bert文本分类实践(二):魔改Bert,融合TextCNN的新思路
写在前面 文本分类是nlp中一个非常重要的任务,也是非常适合入坑nlp的第一个完整项目.虽然文本分类看似简单,但里面的门道好多好多,博主水平有限,只能将平时用到的方法和trick在此做个记录和分享 ...
- Arthas 进阶教程
Arthas 进阶教程 启动math-game 下载demo-arthas-spring-boot.jar,再用java -jar命令启动: wget https://github.com/hengy ...
- Rvalue References
Rvalue References
- TCP 粘包 - 拆包问题及解决方案
目录 TCP粘包拆包问题 什么是粘包 - 拆包问题 为什么存在粘包 - 拆包问题 粘包 - 拆包 演示 粘包 - 拆包 解决方案 方式一: 固定缓冲区大小 方式二: 封装请求协议 方式三: 特殊字符结 ...
- 2.1 OOP & SOLID
OOP & SOLID Implementing DDD highly relies on the Object Oriented Programming (OOP) and SOLID pr ...
- 【UE4】GamePlay架构
新标签打开或者下载看大图 更新: 增加 编程子系统 Subsystem 思维导图 Character pipeline
- C# 如何使用代码添加控件及控件事件
1.首先简单设计一下界面: 添加了Click事件 <Window x:Class="WpfApp.MainWindow" xmlns="http://schemas ...
- mil,mm与inch之间的转换
inch:英寸 mil:密耳 mm:毫米 cm:厘米 1mil=0.0254mm=25.4um 1mm=39.37mil 1inch=1000mil=25.4mm=2.54cm(公分) /////// ...
- Linux C语言链表详细分析
链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用.链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节 ...