在前面几节中反复出现了如下代码:

  1. svg.selectAll("rect")
  2. .data(dataset)
  3. .enter()
  4. .append("rect")

当所选择的 rect 数量比绑定的数据 dataset 的数量少的时候,通常会用到以上代码,这一节就详细说说当被选择元素和数据数量不一致时该如何处理。

这一节将涉及到三个函数。

1. update()    当对应的元素正好满足时 ( 绑定数据数量 = 对应元素 )

实际上并不存在这样一个函数,只是为了要与之后的 enter 和 exit 一起说明才想象有这样一个函数。但对应元素正好满足时,直接操作即可,后面直接跟 text ,style 等操作即可。

2. enter()    当对应的元素不足时 ( 绑定数据数量 > 对应元素 )

当对应的元素不足时,通常要添加元素,使之与绑定数据的数量相等。后面通常先跟 append 操作。

3. exit()     当对应的元素过多时 ( 绑定数据数量 < 对应元素 )

当对应的元素过多时,通常要删除元素,使之与绑定数据的数量相等。后面通常要跟 remove 操作。

下面看看具体的用法:

  1. <body>
  2. <p>AAAAAAAAA</p>
  3. <p>BBBBBBBBB</p>
  4. <p>CCCCCCCCC</p>
  5. <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
  6. <script>
  7. var dataset = [ 10 , 20 , 30 , 40 , 50 ];
  8. var update = d3.select("body").selectAll("p").data(dataset);
  9. var enter  = update;
  10. update.text(function(d,i){
  11. return "update " + d;
  12. });
  13. enter.enter()
  14. .append("p")
  15. .text(function(d,i){
  16. return "enter " + d;
  17. });
  18. </script>
  19. </body>

上面的代码分别用了变量名 update 和 enter 来表示各自的部分,上面的代码的结果为:

           
    结果图可以看到新添加的元素 enter 的部分。
 
    改一部分代码,看看怎么用 exit 。
  1. var dataset = [ 10 , 20 ];
  2. var update = d3.select("body").selectAll("p").data(dataset);
  3. var exit  = update;
  4. update.text(function(d,i){
  5. return "update " + d;
  6. });
  7. exit.exit()
  8. .text(function(d,i){
  9. return "exit";
  10. });

结果图为:

    
    可以看到,调用 exit() 函数后,实际上是返回没有对应数据的元素。通常我们可以删除掉多余的元素,如:
  1. exit.exit()
  2. .remove();
 

尤其以 enter 函数的使用最为多见。因为通常用 D3 做数据可视化时,我们都拥有需要的数据,而且数据量巨大,文档中很少有足够数量的与之对应的元素。所以要特别熟练 enter 的使用方法

本文来自:

博客为: www.ourd3js.com

csdn博客为: blog.csdn.net/lzhlzz

最新文章

  1. video/audio在ios/android上播放兼容
  2. destoon公司搜索页面显示公司类型
  3. Controller的创建
  4. FCN网络的训练——以SIFT-Flow 数据集为例
  5. HashMap的resize和Fail-Fast机制
  6. SNMP详解
  7. build.xml详解
  8. ASP.NET 图片上传工具类 upload image简单好用功能齐全
  9. 远离腰痛的好方法&mdash;&mdash;如何锻炼腰背部肌肉?
  10. overflow的劲爆知识点
  11. comparing-html5-mobile-ui-frameworks
  12. C#获取mac
  13. JavaScript动漫作品(闭幕)
  14. java_==和equal方法
  15. codeforces932E Team Work
  16. ELASTICSEARCH 搜索的评分机制
  17. 多路径multipath配置,udev绑定
  18. 怎样生成一个顶点迭代器(MItMeshVertex)
  19. [原]unity调Android(三)
  20. weixin.com域名易主 传交易价格仅次360.com

热门文章

  1. Java中的弱引用
  2. 阅读摘录《javascript 高级程序设计》01
  3. vs2012 error c4996: This function or variable may be unsafe
  4. Android中日期函数Calendar的一些用法和注意事项
  5. 痛苦的vsftpd配置
  6. 【转】MyEclipse开发Web项目发布到Tomcat下的Root目录
  7. jQuery--事件总结
  8. jbox用法
  9. 推荐一个Android Studio很实用的插件android-butterknife-zelezny
  10. 为什么匿名内部类参数必须为final类型