如何在forEach循环中选择元素? D3

时间:2018-12-13 16:38:58

标签: javascript d3.js

我正在尝试修改链接中传递给Node对象的属性。

我收到此错误:

this.setAttribute is not a function

我想知道对select运算符有什么限制。这是我当前的实现:

function setChildrenLinkWidth(node) {
    node.links().forEach(function (i) {
        d3.select(i.source)
        .attr("stroke", "blue");
     });
 }

如果有人知道,我将不胜感激。

供参考,我已经尝试

d3.select("#" + i.source)

我得到了错误:

Failed to execute 'querySelector' on 'Document': '#[object Object]' is not a valid selector.

编辑:

还有更多代码:

    // Creating nodes here
    let nodeEnter = node.enter().append('g')
    .attr('class', 'node')
    .attr("transform", function (d) {
        return "translate(" + source.x0 + "," + source.y0 + ")";
    })
    .on('click', click);
nodeEnter.append('circle')
.attr('class', 'node')

 // Functions

function setChildrenLinkWidth(node) {
node.links().forEach(function (i) {
    console.log(i.source);
    d3.select(i.source.id)
    attr("stroke", "blue");
 });
}

function click(d) {
    if (d.children) {
        d._children = d.children;
        d.children = null;
    } else {
        d.children = d._children;
        d._children = null;
    }
    update(d);
    setChildrenLinkWidth(d);
}

1 个答案:

答案 0 :(得分:0)

我认为这是因为i.source是源节点,而不仅仅是您可能认为基于数据获取的字符串...因此,如果执行d3.select("#" + i.source.id);将选择具有该ID的元素。除非每个链接的i.source是一个对象。

如果您发布数据结构,我可以进一步澄清。