D3.js学习笔记(二)——使用绑定在DOM上的数据

时间:2022-09-08 19:30:40

简单例子

  在这个例子中,你将会使用D3.js来将数据绑定到DOM元素上。然后再使用D3.js利用绑定到DOM元素上的数据来更新网页。

  在上一章中,我们以下面这个页面作为开始的:

 <!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="d3.v3.min.js"></script>
</head>
<body>
</body>
</html>

  然后我们又使用JavaScript控制台把数据绑定到HTML元素上:

 var theData = [1,2,3]

 var p = d3.select("body").selectAll("p")
.data(theData)
.enter()
.append("p")
.text("hello");

  于是,我们得到了:

D3.js学习笔记(二)——使用绑定在DOM上的数据

  到此——我们已经把数据绑定到DOM元素上了。

  然而,我们真正想要的是取回我们的数据,并把它们显示在我们的初始网页示例。

  换句话说,我们如何取出DOM元素的值?

D3.js学习笔记(二)——使用绑定在DOM上的数据

  打开Chrome的开发者工具,打开JavaScript控制台和元素查阅器(element inspector)。

  在控制台上输入下面这段代码:

 var theData = [1,2,3]

 var p = d3.select("body").selectAll("p")
.data(theData)
.enter()
.append("p")
.text(function(d){return d})

  然后我们得到:

D3.js学习笔记(二)——使用绑定在DOM上的数据

  正如你所看到——我们现在看到了三个包含了我们数据的段落,而不是三个内容是Hello的段落!那么,现在又要说祝贺啦——你现在已经通过D3.js使用绑定到DOM元素上的数据更新了网页!

D3.js 的text操作符回顾

  我们可以看到Javascript代码中只有一个地方发生了变化:

 .text("hello");

  变为:

 .text(function(d){return d;});

  不论改变前后,.text()操作符作用的选集都是:

d3.select("body").selectAll("p")
.data(theData)
.enter()
.append("p")

  这个选集就是三个HTML<p>元素。

  正如我们在上一章中提到的,text操作符为所有选中的元素的textContent属性赋值。

  但是,如果值传递的是一个函数(function),那么这些函数会按序对每一个元素进行计算。同时,这些函数返回值就用来作为元素的文本内容(text content).

  在我们的例子中,这就意味着,并非像之前把文本值设置为“hello”,函数对每一个元素,得到其_data_属性并把它返回给text操作符,然后它把返回值赋值给元素的文本内容。

D3.js操作符中的JavaScript函数

  我们传递到text操作符中的JavaScript函数是:

 function(d){ return d; }

  如果你对JavaScript函数不熟悉,这里有一个简短的介绍:

 function functionName(variableName){
return variableName;
}

  "function"操作符定义了一个名为“functionName”的函数,还有一个参数是变量variableName,最后函数返回这个变量。

  如果没有函数名(functionName),那么就叫做无名函数(anonymous function)。有时候,有的函数仅仅在一个地方使用,因此我们在声明的时候,就把函数声明为无名函数,这样做可以简化我们的代码。在本例中,函数仅仅是在D3.js的text操作符的内部使用了:

 .text(function (d) { return d; });

  注意:我们的函数并不是只能有一行,也并不一定只能是一个简单的返回,我们还可以让函数这样:

 function (d){
var addedNumber = 2;
var tempNumber;
//把输入数据加上2
tempNumber = d + addedNumber;
return tempNumber;
}

  我们把上面的函数作为一个完整的D3.js函数放到JavaScript控制台,运行后得到:

D3.js学习笔记(二)——使用绑定在DOM上的数据

  正如你所看到的,我们的函数给我们的数据集都加了2,然后更新为DOM元素的文本内容。

  使用函数,你可以通过Javascript操纵数据,输出你想要的任何内容。在数据可视化中,当你向往根据数据值得不同来让SVG对象的样式和格式有所区别时,这一点就变得非常重要,也非常有用。

D3.js操作符内的可用变量(variable available)

  在本例中:

 .text( function ( d ) { return d; });

  你可以看到变量d在无名函数中的可用变量。这个变量是由D3.js提供的的,该变量是对要处理的元素的_data_属性的引用。

  还有另外两个D3.js提供的变量可以用,他们是:thisi

  this代表的是当前在处理的DOM元素。

  i是指当前处理的HTML元素在已选元素选集中的索引值。值得注意的是,所有要处理的数据都是按照一定的次序。注意:i是从0开始的。这就意味着我们的数据集:

 var theData = [1,2,3]

  数据处理的顺序是:”1“,”2“,最后是”3“。其中,”1“的i值是0,”2“的i值是1,”3“的i值是2。

  我们可以在JavaScript控制台上运行下面这段代码来证明:

 var theData = [1,2,3]

 var p = d3.select("body").selectAll("p")
.data(theData)
.enter()
.append("p")
.text(function(d,i){
return "i = "+i+" d = "+d;
});

  运行结果是:

D3.js学习笔记(二)——使用绑定在DOM上的数据

  索引值的可获取也方便了很多事件的处理,比如说更改样式、格式化(formatting)。

D3.js学习笔记(二)——使用绑定在DOM上的数据的更多相关文章

  1. D3&period;js学习笔记(六)——SVG基础图形和D3&period;js

    目标 在这一章,我们将会重温SVG图形,学习如何使用D3.js来创建这些图形. 这里会包括前面例子中的SVG基础图形以及如何使用D3.js设置图形的属性. 使用D3.js画一个SVG 的 圆 circ ...

  2. d3&period;js学习笔记(五)——将数据结构化为D3&period;js可处理的

    目标 在这一章,你将会理解如何对数据进行结构化,来更好的使用D3.js. 我们将会回顾我们之前已经学习的,学习D3.js如何使用选集(selections),JavaScript对象基础,以及如何最优 ...

  3. D3&period;js学习笔记(四)—— 使用SVG坐标空间

    目标 在这一章,你将要使用D3.js基于一些数据把SVG元素添加到你想要的坐标位置上. 我们的目标就是使用下面的数据集: var spaceCircles = [30,70,110]; 并使用D3.j ...

  4. D3&period;js学习笔记(一)——DOM上的数据绑定

    开始学习D3.js,网上没有找到很满意的中文教程,但是发现了一个很好的英文教程,讲解的非常详细.从一个初始简单的HTML网页开始,逐步加入D3.js的应用,几乎是逐句讲解.学习的时候,就顺便翻译成中文 ...

  5. D3&period;js学习笔记(三)——创建基于数据的SVG元素

    目标 在这一章,你将会使用D3.js,基于我们的数据来把SVG元素添加到网页中.这一过程包括:把数据绑定到元素上,然后在使用这些元素来可视化我们的数据. 注意:不同于前几章,我们从一个完整的代码开始, ...

  6. 精通D3&period;js学习笔记(1)基础的函数

    买了本吕大师的d3可视化.最近来学习一下,做个笔记.   1.选择元素  select(第一元素) 和selectAll(全部的元素)      类似css的选择器.也可以是dom选中的. var i ...

  7. [转]node&period;js学习笔记&lpar;二&rpar;

    二.express 1.安装 express4 npm --registry=http://registry.npmjs.org install -g express-generator (全局) 2 ...

  8. 【转】require&period;js学习笔记&lpar;二&rpar;

    require.js遵循AMD规范,通过define定义模块,require异步加载模块,一个js文件即一个模块. 一.模块加载require1.加载符合AMD规范模块 HTML: <scrip ...

  9. 精通D3&period;js学习笔记(2)比例尺和坐标

    1.线性比例尺 d3.scale.linear()   创建一个线性比例尺           .domain([0,500]) 定义域           .range([0,1000]) 值域 l ...

随机推荐

  1. 【C&num;】DataRowState演变备忘

    环境:.net 2.0 DataRow的行状态一段时间不用就会吃不准,记录一下,备查. DataRowState 演变表 行属于如下状态时进行右边操作→ 后的状态演变 添加到表 dt.Rows.Add ...

  2. 谈谈jQuery之绑定事件

    http://www.jiangweishan.com/article/jQuery-bind-on.html $.extend({ hook:function(hookName){ var sele ...

  3. Python 正则表达式&lowbar;re模块&lowbar;使用compile加速

    使用compile加速 compile( rule [,flag] ) 将正则规则编译成一个Pattern对象,以供接下来使用. 第一个参数是规则式,第二个参数是规则选项. 返回一个Pattern对象 ...

  4. mvc系统过滤器

    一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration:缓存的时间,以秒为 ...

  5. &lbrack;Abp 源码分析&rsqb;七、仓储与 Entity Framework Core

    0.简介 Abp 框架在其内部实现了仓储模式,并且支持 EF Core 与 Dapper 来进行数据库连接与管理,你可以很方便地通过注入通用仓储来操作你的数据,而不需要你自己来为每一个实体定义单独的仓 ...

  6. git push上传代码到gitlab上,报错401&sol;403&lpar;或需要输入用户名和密码&rpar;

    之前部署的gitlab,采用ssh方式连接gitlab,在客户机上产生公钥上传到gitlab的SSH-Keys里,git clone下载和git push上传都没问题,这种方式很安全. 后来应开发同事 ...

  7. 【转】Linux系统进程的知识总结,进程与线程之间的纠葛

    我们先打个比方,多线程是十字路口多线程是平面交通系统,造价低,但是红绿灯多,老堵车,而多进程是则是立交桥,虽然造价高,上下坡多耗油,但是不堵车.这是一个抽象的概念.相信大家看完会有这种感觉. 进程和线 ...

  8. Centos上安装phpmyadmin

    查看PHP有没有安装:php -v查看apache有没有安装:httpd -v如已经安装则想办法删除. 一.安装Apache(默认安装目录etc/httpd/) 1. 使用yum命令安装Apache ...

  9. Python常用模块-摘要算法(hashlib)

    Python常用模块-摘要算法(hashlib) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MD5算法参数详解 1.十六进制md5算法摘要 #!/usr/bin/env p ...

  10. 13条Android手机必备技巧 让玩机更有趣

    腾讯数码讯(编译:张秀梅)如果你不是一名极客或手机爱好者,那么或许对于手中的Android手机来说,肯定无法做到百分之百了解.对于这款世界上最受欢迎的操作系统来说,有许多不为大部分人所知晓的使用技巧或 ...