javascript - D3 选择不更新现有的分类文本元素
问题描述
我正在使用 d3 v6 创建一个组,bucket
它包含包含不同 SVG 元素的子组。创建后,我想更新每组 class 中 svg 文本元素的数据textbox
,但我无法选择和更新元素。在下面的代码中,我尝试只更新 class 的文本元素large
,但没有任何反应。我没有正确使用类选择器吗?
这就是我创建组的方式:
const bucket = svg.append('g')
.attr('class', 'bucket')
const textboxes = bucket.selectAll('g')
.data(data)
.join('g')
.attr('class', 'textbox')
.attr('transform', d => `translate(0, ${d.index * spacing})`)
const rects = textboxes.append('rect')
.attr("width", 5)
.attr("height", 50);
const textlarge = textboxes.append('text')
.attr('class', 'large')
.text(d => d.text);
const textsmall = textboxes.append('text')
.attr('class', 'small')
.text(d => d.text2);
上面的代码导致以下 DOM 结构:
<svg>
<g class="bucket" transform="translate(50, 0)">
<g class="textbox">
<rect></rect>
<text class="large">A</text>
<text class="small">2</text>
</g>
<g class="textbox">
<rect></rect>
<text class="large">B</text>
<text class="small">1</text>
</g>
</g>
</svg>
这就是我当前尝试更新框中数据的方式(在此摘录中,我仅尝试更新 class 的文本large
):
let bucket = container.select('g.bucket')
.selectAll('g.textbox')
.data(newdata)
.join('g')
.attr('class', 'textbox')
.attr('transform', d => `translate(0, ${d.index * spacing})`)
const textlarge = bucket.append('text')
.attr('class', 'large')
.text(d => d.text));
解决方案
推荐阅读
- php - Json php解析zomato
- ssas - SSAS 计算成员以确定属性具有值的百分比
- c# - 如何在 .NET Core 2.1 中重现复杂参数的 [FromUri] 行为
- javascript - 如何使用 JavaScript 过滤掉特定的 Web 元素
- c - 如何逐字获取输入而不获取C中的整个字符串?
- apache-spark - 为什么在 Spark 中缓存我的数据集之前查询速度更快?
- aws-lambda - 如何使用 aws lamda 和 ses 实现自定义验证邮件链接功能?
- r - 在 Shiny 应用程序中同时更新绘图和表格数据
- google-cloud-platform - 如何删除谷歌云平台项目中默认激活的 API?
- service-worker - 为子目录禁用 service worker