本节书摘来异步社区《D3.js数据可视化实战手册》一书中的第2章,第2.5节,作者: 【加拿大】Nick Qi Zhu,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.5 使用子选择器

我们常常需要在特定范围下选择元素。例如,选取某个section元素下的所有div元素。本例中,我们将介绍D3中这种需求的不同的实现方式及各自的优缺点。

2.5.1 准备阶段

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

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

2.5.2 开始编程

下面的代码分别通过两种不同方式,选取了两个div元素。

<section id="section1"><div><p>blue box</p></div>
</section>
<section id="section2"><div><p>red box</p></div>
</section>
<script type="text/javascript">d3.select("#section1 > div") // <-- A.attr("class", "blue box");d3.select("#section2") // <-- B.select("div") // <-- C.attr("class", "red box");
</script>

代码的视觉效果如图所示。

2.5.3 工作原理

尽管视觉效果相同,但是这个例子中使用了两种完全不同的子选择技术。我们在这里将分别讨论它们的优缺点,以及各自的使用场合。

3级选择器连接符:在行A中,d3.select方法接受了一个特别的字符串,这个字符串为用大于符号(U+003E, >)连接的两个元素名称。这种语法叫做连接符(这里大于号表示子连接符)。3级选择器支持一些不同的结构连接符。我们先来快速浏览一下一些常用连接符。

后代连接符:这个连接符的语法为selector selector。

后代连接符,顾名思义,用来描述两个选择器之间的广义父子关系。我们称之为广义,是因为第二个选择器可以是第一个选择器的任意后代。让我们来看一些例子。

<div>
<span>
The quick <em>red</em> fox jumps over the lazy brown dog</span>
</div>```
使用以下选择器。

div em`
由于div是em元素的祖先,所以这个例子选取了其中的em元素。

子连接符:该连接符的语法为selector > selector。

子连接符描述了两个元素之间的严格父子关系。子连接符用一个大于号(U+003E,>)连接两个元素。

使用如下选择器。

span > em```
将选取出em元素,因为本例中em是span元素的一级子元素。而div>em将不会返回任何有效的选集,因为em并不是div的直接子元素。提示.tif 3级选择器也支持相邻选择器,但由于用得比较少,我们先略过不讲。感兴趣的读者可以参考W3C 3级选择器文档``http://www.w3.org/TR/css3-selectors/#sibling-combinators``。W3C 4级选择器还提供了许多有趣的连接符,如相邻后续(following-sibling)连接符或引用连接符,这些连接符同样非常强大。D3子选择器:在行B和C中,我们使用了不同的子选择器技术。在本例中,行B通过“#section2”选取了一个section元素,然后在行C中级联选择了一个div元素。这种类似级联选择的方式构成了一个区域选择。从字面上来说,这意味着选择了一个嵌套在#secion2内部的div元素。而从语义上来说,这实质上类似于使用了后代连接符#section2 div。这种子选择方式的好处在于父元素是先被独立选取的,因此可以在继续选择子元素之前进行相应的处理,如以下代码所示。

d3.select("#section2") // <-- B

.style("font-size", "2em") // <-- B-1
.select("div") // <-- C
.attr("class", "red box");```

从以上代码可以看到,在选择div元素之前,我们在第B-1行中对#section2使用了一个修饰函数。我们在下一节中将进一步探索这种灵活性。

《D3.js数据可视化实战手册》——2.5 使用子选择器相关推荐

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

    本节书摘来异步社区<D3.js数据可视化实战手册>一书中的第1章,第1.1节,作者: [加拿大]Nick Qi Zhu,更多章节内容可以访问云栖社区"异步社区"公众号查 ...

  2. python qt gui与数据可视化编程 kindle_Kindle电子书 – D3.js数据可视化实战手册 azw3...

    豆瓣评分:7.0 27人评价 简介: 如今这个互联网时代,人们每天都产生海量的数据,如果直接面对这些数据,可能让人无从下手.将数据可视化,用形象立体的形式将其展现,有利于分析其中的关联,攫取可能存在的 ...

  3. 【D3.js数据可视化实战】--(3)桑基图(sankey)的绘制

    什么是桑基图 用D3绘制简单的Sankey图 添加文字 圆形节点 添加交互效果 注:本文未经作者允许严禁转载和演绎 1 什么是桑基图? 桑基图是流图 (flow diagram )的一种,用来描述能量 ...

  4. 【D3.js数据可视化系列教程】(三十六)-- 冰柱图

    1. 冰柱图简介 冰柱图使用D3的分区布局实现,主要用来展现数据的层次和包含关系.实际上使用笛卡尔排列的分区布局数据绘制的就是冰柱图,径向排列就是旭日图. 下图给出的是笛卡尔排列方式. 2. 冰柱图示 ...

  5. 【D3.js数据可视化系列教程】(三十四)-- sankey图

    好多没看懂.先把理解的放着吧 <!DOCTYPE html> <head> <meta charset="utf-8"> <title&g ...

  6. 【D3.js数据可视化系列教程】(二十八)--弦图

    http://blog.csdn.net/tianxuzhang/article/details/14149681 弦图 鼠标悬停效果: (1)指定圆环和玄的数值 [javascript] view ...

  7. c语言数组统计条形图,【D3.js数据可视化系列教程】--(十)更自由的条形图

    1. 准备数据 绘制条形图的输入数只需要一个表示每个条数据量的数组就行. var dataset = [ 5, 10, 13, 19, 21, 25, 22, 18, 15, 13,11, 12, 1 ...

  8. OUR D3.JS 数据可视化专题站(转)

    http://www.ourd3js.com/wordpress/ 转载于:https://www.cnblogs.com/sunshinegirl-7/p/5243194.html

  9. 数据可视化实战——线条、颜色、背景、字体、标记、图例的设置与基本可视化图形的绘制

    上篇我们学习了数据清洗 python数据清洗与预处理实战 现在我们来学习数据可视化 探索性数据分析(Explore data analysis) EDA一定程度上跟描述性数据分析重合,但范围要大于描述 ...

最新文章

  1. 域名删除时间及whois状态说明
  2. Jmeter脚本 GUI和非GUI启动方式
  3. 收音机磁棒天线4根接法_无线电科技基础:无声的海上GPS导航 天线接收的方向性...
  4. Android:日常学习笔记(6)——探究活动(3)
  5. android 分区修改工具_Android刷机包制作工具与教程-大神必备
  6. \pages\WxPay\WxPay.js
  7. 解决ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接
  8. 北京长途汽车站一览表
  9. Python爬虫之模拟CSDN网站登录
  10. 重建大师5.0成为首款支持国产麒麟操作系统的自动实景三维建模软件
  11. 超纤商标为精美时尚服饰再添点睛之笔
  12. Unity3d 动态字体
  13. 水果店微信小程序定制开发需要多少钱【最新报价方案】
  14. 删除word标题前方空格的方法
  15. 爱上开源之Boot4go-etcdv3-browser之剧透篇
  16. Cesium上帝视角漫游
  17. python正则表达式编译_用Python编译正则表达式
  18. C语言实现贪吃蛇小游戏(详解)
  19. 2022电大国家开放大学网上形考任务-企业集团财务管理非免费(非答案)
  20. 软件工程导论——实验报告

热门文章

  1. python 3 5的值_python3 语言特性5
  2. python paperclip_Python pyplot.sca方法代码示例
  3. 为什么一个程序申请的内存有限制_为什么要做自己的小程序商城,做一个要多久?...
  4. 论文阅读——《Robust Superpixel Tracking》
  5. 线性回归 linear regression
  6. 【AI产品】如何让Google的AI给你捕捉最美的自拍瞬间
  7. 【caffe解读】 caffe从数学公式到代码实现1-导论
  8. 2022年全球及中国盐酸异丙肾上腺素行业投资风险与运营盈利分析报告
  9. 全球及中国自卸车行业深度分析与“十四五”发展战略规划研究报告2022-2028年版
  10. Spring源码导入IDEA