《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 开始编程

当然,可以使用nth-child选择器,或者在each函数基础上使用选集迭代函数,但是有些情况下,这些方式过于累赘。这里我们提供一种更加便利的处理原始选集数组的方法。在本例中,可以看到对原始选集数组进行存取和处理的方法。

<table class="table">
    <thead>
    <tr>
        <th>Time</th>
        <th>Type</th>
        <th>Amount</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td>10:22</td>
        <td>Purchase</td>
        <td>$10.00</td>
    </tr>
    <tr>
        <td>12:12</td>
        <td>Purchase</td>
        <td>$12.50</td>
    </tr>
    <tr>
        <td>14:11</td>
        <td>Expense</td>
        <td>$9.70</td>
    </tr>
    </tbody>
</table>
<script type="text/javascript">
    var rows = d3.selectAll("tr");// <-- A
    var headerElement = rows[0][0];// <-- B
    d3.select(headerElement).attr("class", "table-header");// <--C
    d3.select(rows[0][1]).attr("class", "table-row-odd"); //<-- D
    d3.select(rows[0][2]).attr("class", "table-row-even"); //<-- E
    d3.select(rows[0][3]).attr("class", "table-row-odd"); //<-- F
</script>

本例生成的视觉效果如图所示。

2.7.3 工作原理

在本例中,我们遍历了一个页面上的HTML表格,并为之上色。事实上,这并非在D3下为表格的奇偶行上色的最好示例,但在这里,我们主要意在展示如何获取原始选集数组。

技巧.tif 一个更好的为表格奇偶行上色的方式是使用each函数,再根据不同的索引参数来处理。

在行A中,我们选取了所有的行并将选集结果存储在rows变量中。D3选集结果存在于一个JavaScript二维数组中。因此,可以使用rows0和rows0来分别获得第一和第二个选中元素。在行B中,表格的header元素可以通过rows0来获取,得到一个DOM元素对象。在前面章节中我们提到过,任何DOM元素都可以直接通过d3.select来选取,如行C所示。在行D、E、F中,我们展示了如何对选集中的每个元素进行直接索引和访问。

在某些情况下,很容易就能获得原始选集。但是,由于它需要直接访问D3选集中的数组数据,这就会使得代码对此产生结构性的依赖。换句话说,如果在未来的D3版本中,它改变了这一结构,那么依赖它的代码就会受到影响。因此,除非不得已,我们应该尽量避免操作原始选集。

技巧.tif 这种方式通常并不必要,但是如果在特定情况下,例如在单元测试时,我们能够方便地知道每个元素的索引值和其引用,那么这一方式是非常有效的。我们在后面的章节将详细讲解单元测试。

时间: 2024-09-17 20:17:51

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

《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

《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.然而,在网络开发,尤其数据