Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript将数据从父节点分配给子节点&;d3js_Javascript_Arrays_Dom_D3.js - Fatal编程技术网

使用javascript将数据从父节点分配给子节点&;d3js

使用javascript将数据从父节点分配给子节点&;d3js,javascript,arrays,dom,d3.js,Javascript,Arrays,Dom,D3.js,我正在为我的d3js图表创建一个图例(var-legend)。数据绑定到父“g”元素,特别是我需要在子“text”元素中获取的字符串(标签) 问题:如何将父数据从“g”元素分配给子文本元素 代码: 谢谢!完整代码:编辑:标记正确的答案是正确的。下面是我拼凑的糟糕的解决方案 最终得到了一个相当古怪的代码,但它是有效的!感谢您建议添加以前缺少的.select() legend.selectAll("text .legend") .data([headers.slice().r

我正在为我的d3js图表创建一个图例(
var-legend
)。数据绑定到父“g”元素,特别是我需要在子“text”元素中获取的字符串(标签)

问题:如何将父数据从“g”元素分配给子文本元素

代码:


谢谢!完整代码:

编辑:标记正确的答案是正确的。下面是我拼凑的糟糕的解决方案

最终得到了一个相当古怪的代码,但它是有效的!感谢您建议添加以前缺少的.select()

    legend.selectAll("text .legend")
        .data([headers.slice().reverse()]) // data takes an array (headers), wrapped in [], order reversed
        .enter().append("text")
          .attr("x", width - 24)
          .attr("y", 9)
          .attr("dy", ".35em")
          .style("text-anchor", "end")
          .text(function(d,i,j) { return d[j];  }); // ** key ** 

其中,“j”是包含当前元素的组的索引。因此,不需要使用这个.parentNode.数据或类似的数据,因为我们可以使用上面的方法访问父“g”。不是百分之百确定这个机制,但它的工作!如果您有更清晰的方法,请随时详细说明此方法

做这些手工记账,你的工作比你需要的要辛苦得多。将同一数据的不同表示结合在一起是D3的强项之一。通常,您希望将所有记录尽可能非规范化地放在一个数组中,而不是试图手动使用索引和多个列表来关联信息

在创建数据记录的位置,只需添加一个附加属性来保存范围标签,并将这些范围用作
颜色
轴的域。(您也可以查看d3的操作员…)

您的传奇可以是这样简单的():


一般来说,调用
.select()
将继承数据,即
legend.select(“text”)//etc
。很好的解释和简洁的解决方案。显然,我的代码需要一些重构,这篇文章解决了这个问题,谢谢!
    legend.selectAll("text .legend")
        .data([headers.slice().reverse()]) // data takes an array (headers), wrapped in [], order reversed
        .enter().append("text")
          .attr("x", width - 24)
          .attr("y", 9)
          .attr("dy", ".35em")
          .style("text-anchor", "end")
          .text(function(d,i,j) { return d[j];  }); // ** key ** 
var categories = ["foo", "bar", "baz", "qux", "zoo", "yaw"];

var color = d3.scale.ordinal()
    .domain(categories)
    .range(["#98ABC5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c"]);

d3.select("#legend")
    .selectAll("div")
    .data(categories)
    .enter()
    .append("div")
    .style("background-color", color)
    .text(function(d) { return d });