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

简介:

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

2.4 迭代选集中的元素

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

2.4.1 准备阶段

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

https://github.com/NickQiZhu/d3-cookbook/blob/master/src/chapter2/selection-iteration.html
AI 代码解读

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>
AI 代码解读

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

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

27f9f5aa6a1be865a5ceea3ce990c0f1cacc3285

迭代选集中的元素

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
    });
AI 代码解读

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

目录
打赏
0
0
0
0
1819
分享
相关文章
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
array.some()可以用来权限检查、表单验证、库存管理、内容审查和数据处理等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)
array.every()可以用来数据验证、权限检查、一致性检查等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
【前端开发者的福音】彻底改变你编码习惯的神奇数组迭代技巧——从基础到进阶,解锁 JavaScript 数组迭代的N种姿势!
【8月更文挑战第23天】在Web前端开发中,数组是JavaScript中最常用的数据结构之一,掌握高效的数组迭代方法至关重要。本文详细介绍了多种数组迭代技巧:从基础的`for`循环到ES6的`for...of`循环,再到高阶方法如`forEach`、`map`、`filter`、`reduce`及`some`/`every`等。这些方法不仅能提高代码的可读性和维护性,还能有效优化程序性能。通过具体的示例代码,帮助开发者更好地理解和运用这些迭代技术。
67 0
.js的dom元素操作
【10月更文挑战第29天】通过灵活运用这些 DOM 元素操作方法,JavaScript 可以实现丰富的网页交互效果,如动态更新页面内容、响应用户操作、创建和删除页面元素等。在实际开发中,开发者可以根据具体的需求和场景,选择合适的 DOM 元素操作方法来实现所需的功能,为用户提供更加流畅和动态的网页体验。
前端基础(二)_JavaScript变量、JavaScript标识符、JavaScript获取元素、JavaScript的鼠标事件
本文介绍了JavaScript变量的声明和使用、标识符的命名规则、如何获取和操作HTML元素,以及JavaScript的鼠标事件处理,通过示例代码展示了这些基础知识点在实际开发中的应用。
75 2
前端基础(二)_JavaScript变量、JavaScript标识符、JavaScript获取元素、JavaScript的鼠标事件
原生js如何获取dom元素的自定义属性
原生js如何获取dom元素的自定义属性
167 4
|
6月前
|
js删除数组中已知下标的元素
js删除数组中已知下标的元素
80 4
JS 删除数组元素( 5种方法 )
JS 删除数组元素( 5种方法 )
138 1
JavaScript HTML DOM 元素 (节点)
JavaScript HTML DOM 元素 (节点)
47 2
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等