javascript - d3 从列表中间枚举?

标签 javascript d3.js

我正在处理的 d3 图表遇到了一个相当神秘的问题。

这是我正在处理的两 block 数据驱动图表的代码。第一个填充条形图上的条形,第二个填充标签:

svg.selectAll("rect")
            .data(nyb.features)
            .enter()
            .append("rect")
            .attr({
                "fill": "steelblue",
                "width": bar_width,
                "height": function(d) { return 250 - y(d.properties.distance) - 5; },
                "x": function(d, i) { return ((bar_width + 1) * i) + 55; },
                "y": function(d) { return y(d.properties.distance); }
            });

    svg.selectAll("text")
            .data(nyb.features)
            .enter()
            .append("text")
            .attr({
                "fill": "red",
                "x": function(d, i) { console.log(i); return ((bar_width + 1) * i) + 55; },
                "y": function(d) { return y(d.properties.distance); }
            })
            .text("Hello World!");

我希望这会生成一组条形图以及这些条形图的一组文本标签。

出于某种原因,这是我的输出:

enter image description here

检查控制台,这似乎是由于 d3 仅在中间开始枚举数据造成的:

enter image description here

这是为什么?

最佳答案

由于我昨天刚刚回答了类似的问题,所以想将其作为重复项关闭,但再次为子孙后代......

不要使用svg.selectAll("text")svg.selectAll("rect"),你是说给我所有文本 在此 svg 中,并且无意中选择了您不想要的元素。因此,您的输入选择范围较小,有些东西已经存在。

更好的方法是:

svg.selectAll(".myUniqueClass")
  .data(nyb.features)
  .enter()
  .append("text")
  .attr("class", "myUniqueClass")
  ...

关于javascript - d3 从列表中间枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37575496/

相关文章:

javascript - Edge 是否实现多个专业 ServiceWorker 实例?

javascript - JSON key 作为时间

javascript - 从 D3 中的多个 csv 文件导入数据

d3.js - 在 D3 中使用画笔设置初始缩放

javascript - 使用 d3.js 将 SVG 转为 Canvas

javascript - d3 转换在页面加载时开始,而不是在模态弹出窗口加载时开始

javascript - 当用户滚动时加载单个页面站点的不同部分

javascript - 带有jQuery的音频html5播放下一首轨道

javascript - 使用 CSS 或 LESS 根据兄弟数量(不固定)计算 DIV 的宽度

javascript - .prev(选择器)不工作