首页 > 其他 > 详细

D3中数据与DOM element绑定之data() enter() exit()浅析

时间:2015-11-26 12:57:01      阅读:422      评论:0      收藏:0      [点我收藏+]

 

几个非常有用的links:

[1] three little circles. http://bost.ocks.org/mike/circles/

[2] How selection works. http://bost.ocks.org/mike/selection/

[3] Thinking with join. http://bost.ocks.org/mike/join/

具体而言,data()是用来将DOM element与数据进行绑定起来,其第二个参数可以用来specify当前的每个数据元素绑定到哪个DOM element上;

              enter()是用来指代在对数据进行更新后,相对原有的数据来说,新增加的还没有绑定DOM element的数据;

       exit()用来指代在对数据进行更新后,新数据中没有但是原来的数据中存在并且绑定了DOM element的数据 对应的DOM element

如下是本人写的一个测试验证代码,可以直接运行查看打印结果进行分析,相关注释是对关键点的一些解释。

 1 <html>
 2     <head>
 3     <title>D3 Axis Example</title>
 4     <script src="http://d3js.org/d3.v2.js"></script>
 5     </head>
 6     
 7     <body>
 8     <div id = "svgContainer"></div>
 9     <script>
10         var svgContainer = d3.select("body")
11                             .select("#svgContainer")
12                             .append("svg")
13                             .attr("width", 500)
14                             .attr("height", 500);
15 
16         //data 1
17         var dataArray1 = [4, 10, 20];
18         var circle = svgContainer.selectAll("circle")
19             .data(dataArray1);
20         console.log("circle: ",circle);
21 
22         var circleEnter = circle.enter()//.append("circle");
23         console.log("circleEnter",circleEnter);
24 
25         var circleEnterAppend = circle.enter().append("circle")
26             .attr("cx", function(d,i){
27                 return i*100 + 30;
28             })
29             .attr("cy", 200)
30             .attr("r", function(d){
31                 return d;
32             })
33             .attr("fill","steelblue");
34         console.log("circleEnterAppend",circleEnterAppend);
35 
36         //data 2
37         var dataArray2 = [20, 30, 40, 50];
38         var circle2 = svgContainer.selectAll("circle")
39             .data(dataArray2); //注意!这里没有加key function来区分哪个数据绑定到哪个元素,
40                                //故[20, 30, 40]被默认按照顺序绑定到原来[4, 10, 20]对应的元素
41         console.log("circle2: ",circle2);
42 
43         //如果要改变原有的UI element的attribute,
44         //可以在此处直接操作circle2 (因为circle2选定的是所有的原来的circle,而此时新加的数据50还没有被append一个DOM element)
45 
46         var circleEnter2 = circle2.enter()//包含的将是新增加的数据,即:50
47         console.log("circleEnter2",circleEnter2);
48 
49         var circleEnterAppend2 = circleEnter2.append("circle")
50                 .attr("cx",function(d,i){
51                     return i*100 + 30;
52                 })
53                 .attr("cy", 200)
54                 .attr("r",function(d){
55                     return d;
56                 })
57                 .attr("fill","red");
58          console.log("circleEnterAppend2",circleEnterAppend2);  
59          
60         //data 3
61         var dataArray3 = [ 30, 40, 50];
62         var circle3 = svgContainer.selectAll("circle")
63             .data(dataArray3,function(d){ //注意! key function is added!
64                 return d;
65             });
66         console.log("circle3: ",circle3);
67 
68         console.log("exit: ", circle3.exit()); //打印的将是没有绑定数据的DOM element,即:20对应的DOM element
69 
70         // circle3.exit()
71         //     .transition()
72         //     .duration(200)
73         //     .remove();
74 
75     </script>
76     
77     </body>
78 </html>

 

D3中数据与DOM element绑定之data() enter() exit()浅析

原文:http://www.cnblogs.com/jiayouwyhit/p/4997254.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!