《D3.js数据可视化实战手册》——2.4 迭代选集中的元素

2.4 迭代选集中的元素

有些时候,我们需要遍历选集中的所有元素,再根据它们的不同位置分别进行不同的处理。本节将使用D3的选集迭代API来实现。

2.4.1 准备阶段

请在浏览器中打开如下文件的本地副本。

https://github.com/NickQiZhu/d3-cookbook/blob/master/src/chapter2/selection-iteration.html

2.4.2 开始编程

D3为其选集对象提供了简单的迭代接口,我们可以用类似JavaScript数组的方式迭代D3选集。在本例中,我们将对上个例子返回的选集中的3个div元素进行迭代访问,并用索引号标识每个元素。

<div></div>
<div></div>
<div></div>
<script type="text/javascript">
d3.selectAll("div") // <-- A
            .attr("class", "red box") // <-- B
            .each(function (d, i) { // <-- C
            d3.select(this).append("h1").text(i); // <-- D
         });
</script>

技巧.tif 选集本质上来说是增强的数组。后续小节中,我们将探索一下选集的数组特性及使用方法。

上述代码段将产生如下视觉效果。

迭代选集中的元素

2.4.3 工作原理

这个例子基于之前的示例,除了在第A行中选取页面所有div元素,并在第B行上设置class属性之外,我们还对选集调用了each函数。这说明对于多元素选集我们可以进行迭代,并且分别处理每一个元素。

提示.tif 这种在一个函数返回结果基础上调用另一个函数的方式被称为函数级联调用(Function chaining)。如果想进一步了解这种调用模式,请参见第1章。

selection.each(function)函数:each函数接受迭代函数作为其参数输入。给定的迭代函数接受两个可选参数d和i,以及一个隐含的参数this,this为指向当前DOM元素的引用。第一个参数d表示这个元素的数据绑定(我们会在下一章对这一概念做更深入的阐述)。第二个参数i指当前迭代元素在整个选集中的索引值。索引值从0开始,每次迭代依次递增1。

selection.append(name)函数:本例中用到的另一个函数为append。它负责创建一个名为传入参数的新元素,并将其附加为当前选集的最后一个元素,然后返回包含新添加元素的选集。最后我们进一步来研究一下这个例子。

d3.selectAll("div") // <-- A
    .attr("class", "red box") // <-- B
    .each(function(d, i) { // <-- C
        d3.select(this).append("h1").text(i); // <-- D
    });

行C定义了一个参数为d、i的迭代函数。行D则更加有趣,在一开始,d3.select函数将this封装为一个d3选集,这个选集是一个包含当前DOM元素的单元素选集。然后标准的D3选集API就可被用在d3.select(this)上。随后,我们在当前元素选集上调用append("h1")函数,新建h1元素并附加到当前元素上。然后将当前每一个新建h1元素的内容绘制为其索引值。最终效果请参见图“迭代选集中的元素”。注意索引值是从0开始依次递增的。

时间: 2024-09-10 13:17:11

《D3.js数据可视化实战手册》——2.4 迭代选集中的元素的相关文章

《D3.js数据可视化实战手册》—— 1.2 搭建一个简易的D3开发环境

1.2 搭建一个简易的D3开发环境 D3.js数据可视化实战手册 在开始使用D3之前,我们要做的第一件事是搭建一个开发环境.这节里,我们将告诉你如何在几分钟内搭建一个简单的D3开发环境. 1.2.1 准备阶段 在我们开始前,请确保你已经安装好一个文本编辑器. 1.2.2 搭建环境 我们先要下载D3.js. 1.我们可以在http://d3js.org/下载最新版本的D3.js,也可以在https://github. com/mbostock/d3/tags下载之前的版本.另外,如果你对开发中的最

《D3.js数据可视化实战手册》——导读

前言 D3.js数据可视化实战手册 D3.js是一个JavaScript库,它主要用于对数据的动态图表展示.通过HTML.SVG以及CSS,D3可以让数据展现得更加鲜活.D3使得数字的图形化展示变得异常简单,可以说,它是当下最强大的基于网络的数据可视化技术. 本书理论与实践结合,力图向读者全方位地展示D3数字可视化技术,帮助读者快速利用D3创建可视化程序.学习完本书后,快速高效地创建叹为观止的数据可视化程序,对读者来说将是小菜一碟! 本书由浅入深,首先介绍了一些D3数字可视化编程中的基本概念,继

《D3.js数据可视化实战手册》—— 第1章 D3.js入门指南

第1章 D3.js入门指南 D3.js数据可视化实战手册本章涵盖以下内容: 搭建简易的D3开发环境 搭建基于NPM(Node Packaged Modules是Node.js的套件管理工具)的开发环境 理解D3风格的JavaScript

《D3.js数据可视化实战手册》—— 1.3 搭建一个基于NPM的开发环境

1.3 搭建一个基于NPM的开发环境 D3.js数据可视化实战手册如果你所在的项目是一个略复杂的数据展示项目,并且使用了为数不少的JavaScript库,那我们之前讨论的那个简单的解决方案可能就显得有些褚小杯大,不能胜任了.在这一节当中,我们将展示一个使用了NPM(Node Packaged Modules,实际上就是JavaScript库的代码库管理系统)的更加强大的系统.如果你像我一样没有耐心,想更快地尝试本书最带劲儿的部分,想学点秘传招式,完全可以跳过这部分,如果想搭建一个产品开发环境,再

《D3.js数据可视化实战手册》—— 第2章精挑细选

第2章精挑细选 D3.js数据可视化实战手册本章涵盖以下内容: 选取单个元素选取多个元素迭代选集中的元素使用子选择器函数级联调用处理原始选集

《D3.js数据可视化实战手册》—— 1.1 简介

1.1 简介 D3.js数据可视化实战手册本章旨在帮助读者初步认识并且运行D3.js.其中包含一些基本知识,比如什么是D3.js,如何搭建一个典型的D3.js数据可视化(data visualization)环境.还有一个专门的章节,解释了一些JavaScript中鲜为人知而D3.js又甚为倚重的特性. 什么是D3?D3是指数据驱动文档(Data-Driven Documents),根据D3的官方定义: D3.js是一个JavaScript库,它可以通过数据来操作文档.D3可以通过使用HTML.

《D3.js数据可视化实战手册》——2.6 函数级联调用

2.6 函数级联调用 到现在为止,我们看到的D3 API都体现了函数级联调用的思想.因此它接近于形成了一个可以动态构建HTML/SVG的领域特定语言(Domain Specific Language).在接下来的例子中,我们将看到如何只使用D3来生成前一个例子的页面结构. 提示.tif 如果对DSL不熟悉,推荐阅读Martin Fowler在领域特定语言(Domain-Specific Languages)一书中的相关解释,参见http://www.informit.com/articles/a

《D3.js数据可视化实战手册》—— 2.1 简介

2.1 简介 选集(selection)是基于D3的可视化项目的重要基础之一,它用来定位页面上的特定视觉元素.如果你已经熟知W3C的标准CSS选择器,或一些流行的JavaScript库(如jquery或Zepto.js)提供的选择器API,那么掌握D3的选择器API对你来说将易如反掌.不过,即便从未接触过选择器也无妨,本章将借助一些生动的例子,带领你一步步地进入选择器的世界,这些例子涵盖了可视化中的绝大多数应用场景. 所有的现代浏览器都内嵌支持W3C的标准选择器API.然而,在网络开发,尤其数据

《D3.js数据可视化实战手册》——2.7 处理原始选集

2.7 处理原始选集 虽然不常使用,但某些时候,获取D3的原始选集数组对于开发是有利的,因为无论是为了调试,还是和其他JavaScript库集成,都可能需要原始的DOM元素.在本例中,我们将会对此进行展示.同时,我们也会观察D3选集对象的内部结构. 2.7.1 准备阶段 请在浏览器中打开如下文件的本地副本. https://github.com/NickQiZhu/d3-cookbook/blob/master/src/chapter2/raw-selection.html 2.7.2 开始编程