在d3.js中,如何将当前选择传递给.each()回调?
我有一个数据数组,如果我想将这些数据呈现为文本,我将使用下一个代码在d3.js中,如何将当前选择传递给.each()回调?,d3.js,D3.js,我有一个数据数组,如果我想将这些数据呈现为文本,我将使用下一个代码 footer_item = svg_selection.append('g') .attr('class', 'footer_data') .selectAll('g') .data(data) .enter() .append('g') footer_item.append('text') .text((d) => d) ... 如果我想画一些形状而不是文本呢。我可以使
footer_item = svg_selection.append('g')
.attr('class', 'footer_data')
.selectAll('g')
.data(data)
.enter()
.append('g')
footer_item.append('text')
.text((d) => d)
...
如果我想画一些形状而不是文本呢。我可以使用这种方法
footer_item
.each((d) => {
// draw some shape
// don't know how to refer to footer_pointer
draw_my_shape(footer_item_pointer, d.x, d.y);
})
function draw_my_shape(footer_item_pointer, x, y){
footer_item_pointer
.append('circle')
.attr('cx', x)
.attr('cy', y)
...
}
这种方法的唯一问题是,我将丢失指向footer\u项的指针。我需要指向footer\u item
的指针来在g
元素中绘制我的形状
是否可以使用.each()
函数将footer\u项
指针发送到我的绘图回调
我可以使用.call()
函数来实现吗?我尝试过,但是d
变量将包含完整选择和完整数据。我将再次回到我开始的地方。如果我理解正确,您希望访问每个函数内部的footer\u项。您可以通过不使用箭头函数,并在函数中使用this
的范围值来执行此操作:
footer_item.each(function(d, i) {
//"this" refers to the <g> html element that footer_item points to
var foo = d3.select(this);
});
你为什么认为你失去了你的推荐人?根据你提供的代码,我看不到支持这个假设的证据。我更新了我的问题。你能再看一次这个问题吗?你仍然可以用节点[i]
的箭头函数(d,i,nodes)=>{…}
访问这个
。看见
foo.append('circle').attr(...
foo.append('rect').attr(...