在d3.js中获取拖动元素的ID

Dam*_*amb 1 d3.js reactjs

我可能在某种程度上损害了大脑的atm,因为这样的事情应该是微不足道的

我有一堆手动绘制的svg圆(通过React)。然后,我将d3拖动行为附加到所有它们。应用了拖动行为并执行了拖动功能,但是当我拖动这些圆圈之一时,我无法做出相应的响应,因为我不知道哪个圆圈被移动了。在哪里可以获取被拖动元素的ID

我检查了其他几个问题,然后发现了一些疯狂的过滤器解决方案……不可能。

我也偷看了文档并找到了该subject属性。但是,在我尝试过的所有地方都为null。

我的代码:

  componentWillUpdate() {
    let nodes = d3.selectAll("circle");

    const dragFn = (d,i) => {
      d3.event.sourceEvent.stopPropagation();
      this.props.onNodeDrag(I_NEED_AN_ID_HERE);
    }

    const dragBehavior = d3.behavior.drag();
    dragBehavior.on('drag', dragFn);
    dragBehavior.on('dragstart', () => {
      d3.event.sourceEvent.stopPropagation();
    });

    nodes.call(dragBehavior);
  }
Run Code Online (Sandbox Code Playgroud)

eko*_*eko 5

我不知道函数中的“ this”是什么,但是在普通js中,您可以通过以下方式获取html元素的任何属性:

d3.select(this).attr("id"); //or class etc.
Run Code Online (Sandbox Code Playgroud)

或是否已包装

 d3.select(this).select("circle").attr("id");
Run Code Online (Sandbox Code Playgroud)

这是一个示例:http : //jsfiddle.net/a2QpA/343/