gpt4 book ai didi

javascript - d3.js 数据第一次未绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 04:45:25 25 4
gpt4 key购买 nike

我有这样的数据:

[{
label: "ABC", p1: "23", p2: "3"
},
{
label: "EF", p1: "4", p2: "10"
},
{
label: "GV", p1: "5", p2: "15"
},
{
label: "FD", p1: "9", p2: "5"
},
{
label: "SDF", p1: "20", p2: "10"
},]

我尝试用以下方法绘制数据:

var keys = ["p1", "p2"];

function draw(data) {
var p = d3.select("body")
.selectAll(".one")
.data(d3.stack().keys(keys)(data))

p.enter()
.append("p")
.attr("class", "one")

var span = p
.selectAll("span")
.data(function(d) { return d})

span
.enter()
.append("span")
.html(function(d) { return d})

span.exit().remove();
}

p 元素是在第一次调用绘制函数时创建的,但不是 span 元素

我想为数据数组中的每个对象都有一个 span 元素

为什么第一次创建不正确?

https://jsfiddle.net/h2ujjo98/

最佳答案

您正在处理nested selection 。首先,您不需要将数据重新绑定(bind)到嵌套元素,它会自动传递。其次,您没有正确处理输入、更新和退出选择。重构它看起来像这样:

// update selection
var p = d3.select("body")
.selectAll(".lol")
.data(d3.stack().keys(keys)(data));

// those being removed
p.exit().remove();

// those entering
var pEnter = p.enter()
.append("p")
.attr("class", "lol");

// append a span to those entering
pEnter.append("span");

// this is update + enter
p = pEnter.merge(p);

// update the update + enter selection's sub-selection
p.select("span").html(function(d) { return d });

已更新fiddle .

关于javascript - d3.js 数据第一次未绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42891454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com