可视化工具D3.js教程 入门 (第三章)—— 理解 Update Enter Exit
咱们来说说 Update Enter Exit 他们的使用
由于 上一篇 说到的data()方法 给元素绑定数据 是需要元素与数据一一对应的关系,
那么如果元素个数与数据个数 对不上了怎么办? 有可能存在 元素多了 或者数据多了的情况,
对于这种情况 就需要用到咱们要说的这三个方法了,或者说数据绑定的三个步骤,
Update 更新元素节点(绑定数据时默认进行的)
Enter 增加元素节点(这个的后面会用的很多)
Exit 删除元素节点
举例如下:
1、Update Enter
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>hello</title> <script src="https://d3js.org/d3.v5.min.js"></script> </head> <body> <h2>《执迷不悔》</h2> <h3></h3> <h3></h3> <h3></h3> </body> <script> var lyrics = [ '我不是你们想的如此完美', '我承认有时也会辨不清真伪', '并非我不愿意走出迷堆 只是这一次', '这次是自己(而)不是谁', '要我用谁的心去体会 真真切切地感受周围', '就算痛苦 就算是泪 也是属于我的伤悲', '我还能用谁的心去体会 真真切切地感受周围', '就算疲倦 就算是累 也只能执迷(而)不悔' ] var h3 = d3.select('body').selectAll('h3'); // var h3 = d3.selectAll('h3'); var updata = h3.data(lyrics); var enter = updata.enter(); console.log(updata) console.log(enter) updata.text(function (v, i) { return v; }) // 代码执行到这里 页面所展示内容如下 // // 执迷不悔 // 我不是你们想的如此完美 // 我承认有时也会辨不清真伪 // 并非我不愿意走出迷堆 只是这一次 //因为h3标签不够 所以需要先添加h3标签 再给新添加的h3标签绑定后续的数据 var addH3 = enter.append('h3');//注意 这里是往enter中插入h3 console.log(enter) addH3.text(function (v, i) {//给新添加的h3标签 绑定数据 return v; }) // 执行到这里 页面展示内容如下 // // 《执迷不悔》 // 我不是你们想的如此完美 // 我承认有时也会辨不清真伪 // 并非我不愿意走出迷堆 只是这一次 // 这次是自己(而)不是谁 // 要我用谁的心去体会 真真切切地感受周围 // 就算痛苦 就算是泪 也是属于我的伤悲 // 我还能用谁的心去体会 真真切切地感受周围 // 就算疲倦 就算是累 也只能执迷(而)不悔 </script> </html>
这里贴一张控制台打印的数据:
另外还得强调一下 如果 var h3 = d3.selectAll('h3'); 这样直接获取到的h3集合 ,在新添h3标签的时候会存在问题 ,你新添加的元素 就在body外了 如下图”:
2、Update Exit
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script src="https://d3js.org/d3.v5.min.js"></script> </head> <body> <h3>这是一个h3标签</h3> <h3>这是一个h3标签</h3> <h3>这是一个h3标签</h3> <h3>这是一个h3标签</h3> <h3>这是一个h3标签</h3> <h3>这是一个h3标签</h3> <h3>这是一个h3标签</h3> </body> <script> var lyrics = [ '我不是你们想的如此完美', '我承认有时也会辨不清真伪' ] var h3 = d3.select('body').selectAll('h3'); var updata = h3.data(lyrics); var exit = updata.exit(); console.log(updata) console.log(exit) updata.text(function (v,i) { return v; }); // 执行到这里 界面显示的内容 // // // 我不是你们想的如此完美 // 我承认有时也会辨不清真伪 // 这是一个h3标签 // 这是一个h3标签 // 这是一个h3标签 // 这是一个h3标签 // 这是一个h3标签 // exit.remove();//删除多余的h3元素 exit.text(function (v,i) { return '我不删了,我就留着'; }); // 执行到这里 界面显示的内容 // // 我不是你们想的如此完美 // 我承认有时也会辨不清真伪 // 我不删了,我就留着 // 我不删了,我就留着 // 我不删了,我就留着 // 我不删了,我就留着 // 我不删了,我就留着 </script> </html>
3、咱们来张图 阐述下Update Enter Exit三者的关系或者说是步骤,
var array = [3,6,9,12,15]; 有这样一组数据,还有三个p标签;