【问题标题】:D3 Selection: .classed({}) doesn't work, nor does .style({})D3 选择:.classed({}) 不起作用,.style({}) 也不起作用
【发布时间】:2017-05-23 00:56:01
【问题描述】:

我是 D3 新手,在 Lynda 课程“使用 D3.js 进行数据可视化”中学习它。以下代码无法更改所选元素的样式。和教学练习中的完全一样。

d3.selectAll('.item:nth-child(2)')
.classed({
'highlight': true,
'item': false,
'bigger': true})

但是,在我运行以下代码后,它们按预期工作。

d3.selectAll('.item:nth-child(2)')
.classed('highlight',true)
.classed('item', false)
.classed('bigger',true})

其余的类似乎在 .classed 和 .style 中大量使用 ({})。在线的一些答案表明问题源于错误的 D3 版本,其中 .classed({}) 或 .style({}) 不起作用。我该如何解决这个问题?以下是我的html和css代码。

HTML 代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>D3 Graphic</title>
<link rel="stylesheet" href="base.css">
<link rel="stylesheet" href="style.css">
</head>
  <body>
  <script src="https://d3js.org/d3.v4.min.js"></script>
  <div class="container">
    <h2>D3 Graphic</h2>
    <section id="chart">
     <div class="item">Barot Bellingham</div>
     <div class="item">Hassum Harrod</div>
     <div class="item">Jennifer Jerome</div>
     <div class="item">Richard Tweet</div>
     <div class="item">Lorenzo Garcia</div>
     <div class="item">Xhou Ta</div>
    </section>
  </div>
  <script src="d3.js"></script>
  <script src="script.js"></script>
</body>
</html>

CSS 代码

.highlight {
  color: #C64C6F;
  font-weight: 600; 
}

.item { 
  padding-left: 30px; 
}

.bigger {
  font-size: 150%;
}

【问题讨论】:

标签: javascript d3.js


【解决方案1】:

d3v4 不再使用对象字面量(即{})来设置属性、类和样式。您可以通过包含 d3-selection-multi (https://d3js.org/d3-selection-multi.v1.min.js) 和调用 .attrs.styles 而不是 .attr.style 来添加对设置属性和样式的支持

不幸的是,d3-selection-multi 似乎不支持.classed({})。您可以通过调用 selection.classed('class1 class2', true) 来设置(或取消设置)多个类,但似乎没有一种方法可以通过 v4 中的一个函数调用来设置某些类并取消设置其他类。

或者,您可以通过将http://d3js.org/d3.v4.min.js 更改为http://d3js.org/d3.v3.min.js 来使用先前版本的d3。

参考文献
https://github.com/d3/d3-selection/blob/master/README.md#selection_classed
https://github.com/d3/d3-3.x-api-reference/blob/master/Selections.md#classed

【讨论】:

  • 谢谢你,史蒂夫!您能否也告诉我应该如何将支持添加回d3js.org/d3-selection-multi.v1.min.js?应该插入到html、css还是js代码中?
  • 你应该在 html 中添加它,就在 d3.v4.min.js 下方
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 2010-10-28
相关资源
最近更新 更多