【问题标题】:D3 selection html -- index starting at 1 instead of 0 when passing functionD3 selection html -- 传递函数时索引从 1 开始而不是 0
【发布时间】:2015-03-30 02:25:41
【问题描述】:

我对这种行为感到困惑,希望有人能对此有所了解。我有一个数组定义为:

arr_subpop_unique = ["CPL", "NAP", "NPL", "SAP", "SPL", "TPL", "UMW", "WMT", "XER"]

我的 D3 脚本是这样的:

var sizemapHeader = d3.select("#d3-sizemap-hr").selectAll("div")
        .data(arr_subpop_unique)
      .enter().append("div")
        .attr("class", "sizemap-hr-title ellipsis scroll_on_hover")
        .html(function(d,i){ console.log(d,i); return d; });

问题是索引从 1 开始,所以我丢失了“CPL”值。我在控制台中记录了它,它显然从 1 而不是 0 开始。任何人都可以看到这个问题吗?

谢谢!

【问题讨论】:

  • 我刚刚尝试了您的代码并获得了 CPL,我所做的只是将 #d3-sizemap-hr 更改为 body。是否有可能您有一些与隐藏/阻止它的 d3-sizemap-hr 相关的 CSS?
  • 您是否已经在#d3-sizemap-hr 中拥有<div>
  • @GregL - 太棒了。是的,我有一个分隔符
    。删除它,它工作得很好。想将此添加为答案,我会接受吗?谢谢!

标签: javascript arrays d3.js


【解决方案1】:

您的 ID 为 d3-sizemap-hr 的元素内似乎已经有一个 <div>

这是一个问题的原因是您只填充 .enter() 状态的元素,而现有 div 不会发生这种情况。

我有以下建议:

  • 始终为您使用 D3 动态添加的元素创建一个独特的类
  • 具有.enter() 状态的最小值,例如.append(),然后是任何其他不会随数据变化而变化的静态样式。其他所有内容都处于更新状态。

【讨论】:

  • 也感谢您的建议。我能够在 D3 中构建一些东西,但我仍然没有完全掌握进入/更新/退出的基本原理。一步一步到达那里。再次感谢!
  • 我发现 Mike Bostock 本人的 this page 对我理解这些东西很有帮助。
  • 我知道你的意思,thefreeline。我发现this page 很有帮助。一次阅读一个好的解释对我来说是不够的。这需要练习。
猜你喜欢
  • 2017-12-10
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多