D3是广泛使用的,现在它已经成为一个主流的数据可视化
工具。当你刚刚接触d3.js,感觉最强大的地方是数据的(),(),()进入
退出。
在我接触了一段时间后,有了一些了解,我只是说说我的理解。
(数据)
先看一个例子。
执行代码:
d3.select(体),SelectAll(p)。数据({ 1, 2, 3 })
这里,数据()用于将数据绑定到选定的DOM元素。然后,我们可以对这些数据做一些相关的
操作,比如
设置元素的宽度等。
表面上,什么也看不到。但在内部,它增加了一个__data__
属性对应的DOM元素,它可以被document.getelementsbytagname(P){ 0 }。__data__。
进入和退出()()
这两种操作令人费解,因为很难从单名的名称推断出它们的
作用。
在上面的数据()的例子中,我们的DOM元素与数据的数量相同,但是如果不是相同的,我们应该怎么做呢
输入()和出口()用于
处理这种
情况。
进入()
当DOM的数量小于数据的数量,或者根是没有的时候,我们通常希望
程序帮助
创建。
在下面的示例中,我们不预先提供DOM元素:
继续实施:
d3.select(体),SelectAll(p)。数据({ 1, 2, 3 })
与上面的示例不同,我们可以继续执行样式(宽度),但我们不能这样做,因为我们不选择DOM元素,并且需要先创建。
输入()用于在绑定数据后选择DOM元素的缺失部分。我们可能会想,既然它是缺少的部分,该如何选择呢这里我们需要一点想象力,想象我们选择了不存在的东西,我们可以称之为虚拟DOM或占位符(占位符)。
输入()只是一个选择,实际上并没有添加所需的DOM元素。因此,在输入()之后,DOM元素的实际创建通常是用附加()执行的。
因为这个,我们使用d3.select(体),SelectAll(p)。数据({ 1, 2, 3 }),输入(),进入()。追加(P)可以自动根据数据创建所需的DOM元素。
进入的处理
方法 如果没有足够的元素,那么
处理方法通常使用附加()来添加元素:
var数据集= { 3, 6, 9 };
var p = d3.select(体),SelectAll(P);
绑定数据在、更新和输入后获得。
VaR更新= p.data(数据集);
无功输入= update.enter();
流程的更新部分是直接
修改内容。
Update.text(
功能(D){ return d;});
流程的输入部分是添加元素来修改内容。
enter.append(P)
文本(
函数(d){返回d;});
在这种情况下,主体中的p元素只有一个元素,但数据有三个,因此输入部分包含两个数据的过量。处理冗余数据的方法是与它相对应的附加元素。在处理之后,正文中有三个P元素,它们是:
三
六
九
通常,阅读后从
服务器
文件中,有大量的数据,但没有元素在Web page.d3这是你可以选择一个空的设定了一个非常重要的特征,然后使用回车()。追加()在插入元素的形式。假设没有P元体现在,看看下面的代码:
数据10,20,30,40,50 } = { var;
VaR的身体= d3.select(体);
Body.selectAll(P) / / P选择所有的身体,但不是P,所以我选择了一个空集合
数据(数据集)/数据集绑定数组
输入(输入)返回部分
添加()
文本(函数(d){返回d;});
上面的代码中,所有的选择一个空集,那么数据绑定。因为选择集是空的,通过返回的数据更新的部分()是空的,然后进入()和附加()被称为使每个数据元素P对应于它。最后,改变的P元素的内容。处理输入部分是使用附加的常用方法()添加元素。
(退出)
与输入()相反,出口()用于选择比数据更重要的DOM元素。
在下面的示例中,我们提供多个DOM元素:
这一次很容易理解,因为它是更多,然后是实际存在,那是最后一次。
当你出来时,我们可以使用.
删除()来移除这些元素,代码如下所示:
d3.select(体),SelectAll(p)。数据({ 1, 2, 3 })。Exit()删除();
出口加工方法
有许多与数据不符的元素。对于这样的元素,通常的做法是使用删除()来删除元素。假设在正文中有5个P元素,请看下面的代码:
var数据集= { 10, 20, 30 };
var p = d3.select(体),SelectAll(P);
绑定数据在更新部分和退出部分后获得。
VaR更新= p.data(数据集);
VaR退出= update.exit();
更新的部分是通过修改内容来处理的。
Update.text(功能(D){ return d;});
流程的 /退出部分是要删除的。
Exit.remove();
在这个代码中,处理退出部分的方法是删除。删除后,
网页中不会有多余的P元素。
参考材料
用
连接思考——由Mike Bostock