Javascript D3选择html——传递函数时,索引从1开始,而不是从0开始
我对这种行为感到困惑,希望有人能有所了解。我有一个数组定义为:Javascript D3选择html——传递函数时,索引从1开始,而不是从0开始,javascript,arrays,d3.js,Javascript,Arrays,D3.js,我对这种行为感到困惑,希望有人能有所了解。我有一个数组定义为: 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("
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。有人能看出这有什么问题吗
谢谢 元素中似乎已经有一个ID为
d3 sizemap hr
的
这是一个问题的原因,因为您只填充.enter()
状态中的元素,而现有div不会出现这种情况
我有以下建议:
- 始终为使用D3动态添加的元素创建一个唯一的类
- 对于
状态,例如您的.enter()
以及任何其他不会随数据变化而变化的静态样式,应尽可能减少。其他一切都处于更新状态.append()
#d3 sizemap hr
中有了
。是的,我有一个垫片。移除它,效果非常好。想加上这个作为答案,我会接受吗?谢谢谢谢你的建议。我能够在D3中构建一些东西,但我仍然没有完全掌握进入/更新/退出的基本原理。一步一步地到达那里。再次感谢!我发现迈克·博斯托克对我了解这些东西很有帮助。我知道你的意思,电影。我觉得很有帮助。对我来说,只看一次好的解释是不够的。这需要练习。