《D3.js数据可视化实战手册》——2.2 选择单个元素

简介:

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

2.2 选择单个元素

在进行视觉处理时,我们常常需要选择页面上的单个元素。本例将展示在D3中如何使用CSS选择器来选取特定单个元素。

2.2.1 准备阶段

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

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

2.2.2 开始编程

让我们来选取一些元素并在屏幕上打印经典的“hello world”信息。

<p id="target"></p><!-- A -->
<script type="text/javascript">
  d3.select("p#target") // <-- B
  .text("Hello world!"); // <-- C
</script>
AI 代码解读

本例将在屏幕上显示“hello world”。

2.2.3 工作原理

在D3中,我们用d3.select方法来实现对单个元素的选取。该select方法接受一个CSS3选择器字符串或者待操作对象的引用,并返回一个D3选集。随后,就可以用级联修饰函数对该选集的属性以及HTML进行操作了。

技巧.tif 如果发现多个匹配元素,最终只返回第一个匹配的元素。

本例中,我们在B行,通过id的值选取了段落元素,然后在C行中将它的文本设置为hello world。所有的D3选集都支持一系列标准修饰函数,本例中用到的text函数就是其中之一。下面列出了本书中用到的部分常见修饰函数。

selection.attr函数:用来读取或改变元素上的给定属性。
// 将p元素的foo属性设为goo
d3.select("p").attr("foo", "goo");
//读取p元素的foo属性
d3.select("p").attr("foo");
selection.classed函数:用来添加、删除选定元素上的css class。
// 检测p元素是否有名为goo的class
d3.select("p").classed("goo");
//为p元素添加goo class
d3.select("p").classed("goo", true);
//移除p元素上的goo class。classed方法也接受函数作为参数传入,
// 从而可以动态地添加或移除css class
d3.select("p").classed("goo", function(){return false;});
selection.style函数:用来给选定元素添加指定样式。
// 获取p元素的font-size
d3.select("p").style("font-size");
//将font-size的值设为10px
d3.select("p").style("font-size", "10px");
//将font-size的值设为某个函数的运算结果。style方法也接受函数作为参数传入,
// 从而可以动态地改变样式的值  
d3.select("p"). style("font-size", function(){
  return normalFontSize + 10;});
selection.text函数:用来获取或设置选定元素的文本内容。
// 获取p元素的文本内容
d3.select("p").text();
// 将p元素的文本内容设为"hello"
d3.select("p").text("Hello");
// text方法也接受函数作为参数传入,从而可以动态地改变文本内容
d3.select("p").text(function () {
  var model = retrieveModel();
  return model.message;
});
selection.html函数:用来更改元素内的HTML。
// 获取p元素的inner html
d3.select("p").html();
// 将p元素的inner html 设为 "<b>Hello</b>"
d3.select("p").text("<b>Hello</b>");
// html方法也接受函数作为参数传入,从而可以动态地改变元素内的HTML
d3.select("p").text(function () {
  var template = compileTemplate();
  return template();
});
AI 代码解读

这些修饰函数可用于单个元素以及多个元素,当应用于多元素选集时,这些函数会依次作用于其中每个元素。在后续的内容中将会看到类似示例。

提示.tif 当函数被作为参数传入修饰函数时,其实同时还有一些其他的隐含参数传入,最终实现了数据驱动计算。D3的强大之处就在于数据驱动的方式,它的名称数据驱动文档(data-driven document),也正是来自于此。我们在后续章节中会详细讨论这一问题。

相关文章
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
100 1
通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
array.some()可以用来权限检查、表单验证、库存管理、内容审查和数据处理等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)
array.every()可以用来数据验证、权限检查、一致性检查等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
.js的dom元素操作
【10月更文挑战第29天】通过灵活运用这些 DOM 元素操作方法,JavaScript 可以实现丰富的网页交互效果,如动态更新页面内容、响应用户操作、创建和删除页面元素等。在实际开发中,开发者可以根据具体的需求和场景,选择合适的 DOM 元素操作方法来实现所需的功能,为用户提供更加流畅和动态的网页体验。
前端基础(二)_JavaScript变量、JavaScript标识符、JavaScript获取元素、JavaScript的鼠标事件
本文介绍了JavaScript变量的声明和使用、标识符的命名规则、如何获取和操作HTML元素,以及JavaScript的鼠标事件处理,通过示例代码展示了这些基础知识点在实际开发中的应用。
79 2
前端基础(二)_JavaScript变量、JavaScript标识符、JavaScript获取元素、JavaScript的鼠标事件
原生js如何获取dom元素的自定义属性
原生js如何获取dom元素的自定义属性
170 4
|
6月前
|
js删除数组中已知下标的元素
js删除数组中已知下标的元素
80 4
JS 删除数组元素( 5种方法 )
JS 删除数组元素( 5种方法 )
145 1
JavaScript HTML DOM 元素 (节点)
JavaScript HTML DOM 元素 (节点)
48 2
AI助理

你好,我是AI助理

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