Javascript ';未定义';在d3.selectAll中使用attr方法时

Javascript ';未定义';在d3.selectAll中使用attr方法时,javascript,d3.js,Javascript,D3.js,我正在使用一个“d3选择”包来更改我的绘图,我被这个奇怪的错误阻止了 当我在selectAll('path')之后使用'attr'方法时,它可以正常工作,但当我在selectAll('line')上使用它时,它会中断。我发现selectAll('line')上的'attr'没有收到任何信息 代码 控制台上的结果 我不知道这里发生了什么。当您向诸如attr()之类的函数提供函数时,函数的第一个参数是绑定到元素的数据,该数据以前通常通过调用组上的data()来分配。它不是SVG元素本身 在您的情况

我正在使用一个“d3选择”包来更改我的绘图,我被这个奇怪的错误阻止了

当我在selectAll('path')之后使用'attr'方法时,它可以正常工作,但当我在selectAll('line')上使用它时,它会中断。我发现selectAll('line')上的'attr'没有收到任何信息

代码 控制台上的结果


我不知道这里发生了什么。

当您向诸如
attr()
之类的函数提供函数时,函数的第一个参数是绑定到元素的数据,该数据以前通常通过调用组上的
data()
来分配。它不是SVG元素本身

在您的情况下,有数据绑定到路径,但没有绑定到行,因此在调用函数时,行上会出现
undefined
。要通过函数获取对SVG元素的引用,请使用:

lines.each(function() {
    console.log(this);
})

必须使用完整函数,而不是简写,才能正确确定
this
的作用域

当您向
attr()
等函数提供函数时,函数的第一个参数是绑定到元素的数据,该数据通常是以前通过调用组上的
data()
来分配的。它不是SVG元素本身

在您的情况下,有数据绑定到路径,但没有绑定到行,因此在调用函数时,行上会出现
undefined
。要通过函数获取对SVG元素的引用,请使用:

lines.each(function() {
    console.log(this);
})

您必须使用完整的函数,而不是简写,才能正确地确定
this
的作用域

实际上我刚刚记得-您可以使用内联函数,因为提供给函数的第三个参数是节点集合。因此,
行。每个((d,i,nodes)=>console.log(nodes[i]))
也可以工作,实际上我刚记起来-您可以使用内联函数,因为提供给函数的第三个参数是节点的集合。所以
行。每个((d,i,nodes)=>console.log(nodes[i]))
也可以工作